Main Page   Modules   Alphabetical List   Data Structures   File List   Related Pages  

sE12.h

00001 /*sE12.h
00002 low level functions for controlling the bus
00003 */
00004 
00005 #define DATA_OFF     0
00006 #define RDWR_OFF     1
00007 #define BIT_NINE_OFF 1
00008 #define IRQ_OFF      2
00009 #define DTACK_OFFSET 2
00010 #define ISOOUT_OFF   3
00011 #define ISOIN_OFF    3
00012 #define EDGE_CONTROL RDWR_OFF
00013 
00014 #define IRQ_BIT  0x80
00015 #define NINE_BIT 0x80
00016 
00017 #define PLDR1_IDENT 0x72
00018 
00019 #define RISING_EDGE 0x80
00020 #define FALLING_EDGE 0
00021 
00022 #define PLDWR(device,offset,data){outb(data,(device->address+offset));}
00023 
00024 #define DTACK_ON(device){PLDWR(device,DTACK_OFFSET,1);wmb();}
00025 #define DTACK_OFF(device){PLDWR(device,DTACK_OFFSET,0);wmb();}
00026 #define READ_MODE(device){PLDWR(device,RDWR_OFF,(device->IRQedge|1));wmb();}
00027 #define WRITE_MODE(device){PLDWR(device,RDWR_OFF,device->IRQedge);wmb();}
00028 #define BUSOUT(device,data){PLDWR(device,DATA_OFF,data);wmb();}
00029 #define ISO_OUT(device,data){PLDWR(device,ISOOUT_OFF,data);wmb();}
00030 #define IRQ_EDGE_INIT(device) READ_MODE(device)
00031 
00032 #define PLDRD(device,offset) inb(device->address+offset)
00033 
00034 #define MIRQ_HIGH(device) (PLDRD(device,IRQ_OFF)&IRQ_BIT)
00035 #define MIRQ_LOW(device) (!MIRQ_HIGH(device))
00036 
00037 #define BIT_NINE_READ(device,data){data=PLDRD(device,BIT_NINE_OFF)&NINE_BIT;rmb();} 
00038 #define DATA_PORT(device,data){data=PLDRD(device,DATA_OFF);rmb();}
00039 #define ISO_IN(device,data){data=PLDRD(device,ISOIN_OFF);rmb();}
00040 
00041 
00042 
00043 #define WAIT_FOR_IRQ_LOW(device){rmb();while(MIRQ_HIGH(device))rmb();}
00044 #define WAIT_FOR_IRQ_HIGH(device){rmb();while(MIRQ_LOW(device))rmb();}
00045 
00046 
00047 #define IDENT_CHECK(device,ident){ident=(PLDRD(device,BIT_NINE_OFF)&(~NINE_BIT));rmb();}
00048 

Generated on Mon Dec 29 09:25:43 2003 for PCM-37e12 by doxygen1.2.15