⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 io.cc

📁 Linux下比较早的基于命令行的DVD播放器
💻 CC
字号:
//// Copyright (c) 2004 by Istv醤 V醨adi//// This file is part of dxr3Player, a DVD player written specifically // for the DXR3 (aka Hollywood+) decoder card, but now handles other// hardware as well. These files contain a (mostly) user-space driver // for the Unichrome board found on Via's EPIA motherboards.//// The information for implementing this driver has been gathered// from the following sources://// - The DirectFB Unichrome driver//   Copyright (c) 2003 Andreas Robinson, All rights reserved.//// - Andreas Robinson's MPEG-2 decoder for the Unichrome board.//   Copyright (c) 2003 Andreas Robinson, All rights reserved.//// - Via's Unichrome Framebuffer driver//   Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.//   Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA//------------------------------------------------------------------------------#include "IO.h"#include "util/Log.h"#include <cstdio>#include <unistd.h>#include <fcntl.h>#include <sys/mman.h>extern "C" {#include <pci/pci.h>}//------------------------------------------------------------------------------using unichrome::IO;//------------------------------------------------------------------------------IO::IO() :    framebuffer(0),    mmio(0),    revision(0),    sequencer(PORT_SEQUENCER),    control(PORT_CONTROL),    graphics(PORT_GRAPHICS),    status(PORT_STATUS),    attribute(PORT_ATTRIBUTE),    miscOutput(PORT_MISC_OUTPUT),    miscOutput2(PORT_MISC_OUTPUT2),    miscInput(PORT_MISC_INPUT),    i2c(*this){    pci_access* pacc = pci_alloc();        pci_init(pacc);    pci_scan_bus(pacc);    for(pci_dev* dev = pacc->devices; dev!=0; dev=dev->next) {        pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES | PCI_FILL_SIZES);        if (dev->vendor_id==VENDOR_ID && dev->device_id==DEVICE_ID) {            // FIXME: POSIX::open            int fd = open("/dev/mem", O_RDWR);            if (fd<0) {                perror("open(/dev/mem)");                abort();            }                        // FIXME: POSIX::mmap            framebuffer = mmap(0, FRAMEBUFFER_SIZE,                                PROT_READ|PROT_WRITE, MAP_SHARED,                               fd, dev->base_addr[BASEIDX_FRAMEBUFFER] &                                PCI_ADDR_MEM_MASK);            if (framebuffer==MAP_FAILED) {                perror("mmap(framebuffer)");                abort();            }            mmioSize = dev->size[BASEIDX_MMIO];            mmio = mmap(0, mmioSize,                        PROT_READ|PROT_WRITE, MAP_SHARED,                        fd, dev->base_addr[BASEIDX_MMIO] & PCI_ADDR_MEM_MASK);            if (mmio==MAP_FAILED) {                perror("mmap(mmio)");                abort();            }            close(fd);            Log::debug("Unichrome framebbufer @%p, mmio @%p\n", framebuffer, mmio);        }        if (dev->bus==0 && dev->dev==0 && dev->func==0) {            revision = pci_read_byte(dev, 0xf6);        }    }    pci_cleanup(pacc);    if (framebuffer==0 || mmio==0) {        Log::debug("Cannot find Unichrome device!\n");        abort();    } else {        Log::debug("Unichrome revision %u\n", revision);    }    if (ioperm(0x3c0, 32, 1)<0) {        perror("ioperm");        abort();    }}//------------------------------------------------------------------------------IO::~IO(){    ioperm(0x3c0, 32, 0);    munmap(mmio, mmioSize);    munmap(framebuffer, FRAMEBUFFER_SIZE);}//------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -