ARPDAS_QNX6 1.0
|
00001 /** @file 00002 subbus.h defines the interface to the subbus resident library 00003 Before calling the subbus routines, you must first call 00004 load_subbus(). This returns the subfunction of the resident 00005 subbus library or 0 if none is installed. 00006 */ 00007 #ifndef SUBBUS_H_INCLUDED 00008 #define SUBBUS_H_INCLUDED 00009 #include <sys/siginfo.h> 00010 00011 #ifdef __cplusplus 00012 extern "C" { 00013 #endif 00014 00015 00016 /* Subbus subfunction codes: These define the hardware that talks 00017 to the subbus. It does not talk about the interface between 00018 the library and the system controller itself. 00019 */ 00020 #define SB_PCICC 1 00021 #define SB_PCICCSIC 2 00022 #define SB_SYSCON 3 00023 #define SB_SYSCON104 4 00024 #define SB_SYSCONDACS 5 00025 00026 /* subbus_features: */ 00027 #define SBF_SIC 1 /* SIC Functions */ 00028 #define SBF_LG_RAM 2 /* Large NVRAM */ 00029 #define SBF_HW_CNTS 4 /* Hardware rst & pwr Counters */ 00030 #define SBF_WD 8 /* Watchdog functions */ 00031 #define SBF_SET_FAIL 0x10 /* Set failure lamp */ 00032 #define SBF_READ_FAIL 0x20 /* Read failure lamps */ 00033 #define SBF_READ_SW 0x40 /* Read Switches */ 00034 #define SBF_NVRAM 0x80 /* Any NVRAM at all! */ 00035 #define SBF_CMDSTROBE 0x100 /* CmdStrobe Function */ 00036 00037 typedef struct __attribute__((__packed__)) { 00038 unsigned short req_len; 00039 unsigned short n_reads; 00040 char multread_cmd[256]; 00041 } subbus_mread_req; 00042 00043 extern int load_subbus(void); 00044 00045 extern unsigned short subbus_version; 00046 extern unsigned short subbus_features; 00047 extern unsigned short subbus_subfunction; 00048 extern unsigned short read_subbus(unsigned short addr); 00049 extern int write_ack(unsigned short addr, unsigned short data); 00050 extern int read_ack(unsigned short addr, unsigned short *data); 00051 #define write_subbus(x,y) write_ack(x,y) 00052 extern subbus_mread_req *pack_mread_request( int n_reads, const char *req ); 00053 extern subbus_mread_req *pack_mread_requests( unsigned int addr, ... ); 00054 extern int mread_subbus( subbus_mread_req *req, unsigned short *data); 00055 extern int set_cmdenbl(int value); 00056 extern int set_cmdstrobe(int value); 00057 extern unsigned short read_switches(void); 00058 extern int set_failure(unsigned short value); 00059 extern unsigned short read_failure(void); 00060 extern int tick_sic(void); 00061 extern int disarm_sic(void); 00062 extern char *get_subbus_name(void); 00063 #define subbus_name get_subbus_name() 00064 extern int cache_write(unsigned short addr, unsigned short data); 00065 extern unsigned short cache_read(unsigned short addr); 00066 00067 extern unsigned short sbrb(unsigned short addr); 00068 extern unsigned short sbrba(unsigned short addr); 00069 #define sbrw(x) read_subbus(x) 00070 extern unsigned int sbrwa(unsigned short addr); 00071 #define sbwr(x,y) write_ack(x,y) 00072 #define sbwra(x,y) write_ack(x,y) 00073 00074 extern int subbus_int_attach( char *cardID, unsigned short address, 00075 unsigned short region, struct sigevent *event ); 00076 extern int subbus_int_detach( char *cardID ); 00077 extern int subbus_quit(void); 00078 00079 #ifdef __cplusplus 00080 }; 00081 #endif 00082 00083 #endif