/*****************************************************************************\ * Tseng Labs ET6000, ET6100 and ET6300 graphics driver for BeOS 5. * Copyright (c) 2003-2004, Evgeniy Vladimirovich Bobkov. \*****************************************************************************/ #ifndef _DRIVERINTERFACE_H_ #define _DRIVERINTERFACE_H_ #include #include #include #include #if defined(__cplusplus) extern "C" { #endif /* * This is the info that needs to be shared between the kernel driver and * the accelerant for the et6000 driver. */ /*****************************************************************************/ typedef struct { sem_id sem; int32 ben; } benaphore; #define INIT_BEN(x) x.sem = create_sem(0, "ET6000 "#x" benaphore"); x.ben = 0; #define AQUIRE_BEN(x) if((atomic_add(&(x.ben), 1)) >= 1) acquire_sem(x.sem); #define RELEASE_BEN(x) if((atomic_add(&(x.ben), -1)) > 1) release_sem(x.sem); #define DELETE_BEN(x) delete_sem(x.sem); /*****************************************************************************/ #define ET6000_PRIVATE_DATA_MAGIC 0x100CC001 /*****************************************************************************/ #define ET6000_HANDLER_INSTALLED 0x80000000 /*****************************************************************************/ /* * How many bytes of memory the accelerator (ACL) takes from the off-screen * part of the adapter onboard memory to perform some of its operations. */ #define ET6000_ACL_NEEDS_MEMORY 4 /*****************************************************************************/ enum { ET6000_GET_PRIVATE_DATA = B_DEVICE_OP_CODES_END + 1, ET6000_GET_PCI, ET6000_SET_PCI, ET6000_DEVICE_NAME, ET6000_PROPOSE_DISPLAY_MODE, ET6000_SET_DISPLAY_MODE }; /*****************************************************************************/ typedef struct { uint16 vendor_id; /* PCI vendor ID, from pci_info */ uint16 device_id; /* PCI device ID, from pci_info */ uint8 revision; /* PCI device revsion, from pci_info */ area_id memoryArea; /* Onboard memory's area_id. The addresses * are shared with all teams. */ void *framebuffer; /* Start of the mapped framebuffer */ void *physFramebuffer; /* Physical address of start of framebuffer */ void *memory; /* Start of the mapped adapter onboard memory */ void *physMemory; /* Physical address of start of onboard memory */ uint32 memSize; /* Size of available onboard memory, bytes. */ uint16 pciConfigSpace; /* PCI header base I/O address */ void *mmRegs; /* memory mapped registers */ void *emRegs; /* external mapped registers */ area_id modesArea; /* Contains the list of display modes the driver supports */ uint32 modesNum; /* Number of display modes in the list */ int32 flags; display_mode dm; /* current display mode configuration */ uint8 bytesPerPixel; /* bytes(!) per pixel at current display mode */ frame_buffer_config fbc; /* bytes_per_row and start of frame buffer */ struct { uint64 count; /* last fifo slot used */ uint64 lastIdle; /* last fifo slot we *know* the engine was idle after */ benaphore lock; /* for serializing access to the acceleration engine */ } engine; uint32 pixelClockMax16; /* The maximum speed the pixel clock should run */ uint32 pixelClockMax24; /* at for a given pixel width. Usually a function */ /* of memory and DAC bandwidths. */ } ET6000SharedInfo; /*****************************************************************************/ /* Read or write a value in PCI configuration space */ typedef struct { uint32 magic; /* magic number to make sure the caller groks us */ uint32 offset; /* Offset to read/write */ uint32 size; /* Number of bytes to transfer */ uint32 value; /* The value read or written */ } ET6000GetSetPCI; /*****************************************************************************/ /* Retrieve the area_id of the kernel/accelerant shared info */ typedef struct { uint32 magic; /* magic number to make sure the caller groks us */ area_id sharedInfoArea; /* area_id containing the shared information */ } ET6000GetPrivateData; /*****************************************************************************/ /* * Retrieve the device name. Usefull for when we have a file handle, but * want to know the device name (like when we are cloning the accelerant). */ typedef struct { uint32 magic; /* magic number to make sure the caller groks us */ char *name; /* The name of the device, less the /dev root */ } ET6000DeviceName; /*****************************************************************************/ typedef struct { uint32 magic; /* magic number to make sure the caller groks us */ display_mode mode; /* Proposed mode or mode to set */ uint16 pciConfigSpace; /* For setting the mode */ uint32 memSize; /* For proposing the mode */ } ET6000DisplayMode; /*****************************************************************************/ #if defined(__cplusplus) } #endif #endif /* _DRIVERINTERFACE_H_ */