david/ipxe
david
/
ipxe
Archived
1
0
Fork 0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
ipxe/src/include/pcmcia.h

157 lines
3.8 KiB
C

// pcmcia.h - Header file for PCMCIA support
#ifndef PCMCIA_H
#define PCMCIA_H
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef u_short ioaddr_t;
extern int sockets;
#define MAXPCCSOCKS 8
#define MAXPCCCONFIGS 8
typedef enum ebpdriver_t { I82365, SOMEDRIVER } ebpdriver_t;
typedef enum interface_func_t { INIT, SHUTDOWN, MAPATTRMEM, UNMAPATTRMEM, SELECTCONFIG } interface_func_t;
typedef enum ebpstatus_t { EMPTY, HASCARD, INITIALIZED, SUSPENDED, OTHERDEVICE, UNKNOWN } ebpstatus_t;
struct driver_interact_t {
ebpdriver_t id;
int (*f)(interface_func_t,int,int,int,int);
char *name;
};
struct pccsock_t {
ebpdriver_t device;
int drivernum;
ebpstatus_t status;
// Internal usage of the drivers:
int internalid;
int flags;
int ioaddr;
int type;
int configoffset;
int possibleconfignum;
int stringoffset;
u_int stringlength;
int rmask0;
};
extern struct pccsock_t pccsock[MAXPCCSOCKS];
extern u_int pccsocks;
struct pcc_config_t {
u_char index;
u_char irq;
int iowin;
int iolen;
};
int i82365_interfacer(interface_func_t,int,int,int,void *);
void sleepticks(int);
#define EINVAL 22
//*********************************************************** cc.h:
/* Definitions for card status flags for GetStatus */
#define SS_WRPROT 0x0001
#define SS_CARDLOCK 0x0002
#define SS_EJECTION 0x0004
#define SS_INSERTION 0x0008
#define SS_BATDEAD 0x0010
#define SS_BATWARN 0x0020
#define SS_READY 0x0040
#define SS_DETECT 0x0080
#define SS_POWERON 0x0100
#define SS_GPI 0x0200
#define SS_STSCHG 0x0400
#define SS_CARDBUS 0x0800
#define SS_3VCARD 0x1000
#define SS_XVCARD 0x2000
#define SS_PENDING 0x4000
/* cc.h: for InquireSocket */
typedef struct socket_cap_t {
u_int features;
u_int irq_mask;
u_int map_size;
ioaddr_t io_offset;
u_char pci_irq;
//struct pci_dev *cb_dev;
//struct bus_operations *bus;
void *cb_dev;
void *bus;
} socket_cap_t;
/* InquireSocket capabilities */
#define SS_CAP_PAGE_REGS 0x0001
#define SS_CAP_VIRTUAL_BUS 0x0002
#define SS_CAP_MEM_ALIGN 0x0004
#define SS_CAP_STATIC_MAP 0x0008
#define SS_CAP_PCCARD 0x4000
#define SS_CAP_CARDBUS 0x8000
/* for GetSocket, SetSocket */
typedef struct socket_state_t {
u_int flags;
u_int csc_mask;
u_char Vcc, Vpp;
u_char io_irq;
} socket_state_t;
extern socket_state_t dead_socket;
/* Socket configuration flags */
#define SS_PWR_AUTO 0x0010
#define SS_IOCARD 0x0020
#define SS_RESET 0x0040
#define SS_DMA_MODE 0x0080
#define SS_SPKR_ENA 0x0100
#define SS_OUTPUT_ENA 0x0200
#define SS_DEBOUNCED 0x0400 /* Tell driver that the debounce delay has ended */
#define SS_ZVCARD 0x0800
/* Flags for I/O port and memory windows */
#define MAP_ACTIVE 0x01
#define MAP_16BIT 0x02
#define MAP_AUTOSZ 0x04
#define MAP_0WS 0x08
#define MAP_WRPROT 0x10
#define MAP_ATTRIB 0x20
#define MAP_USE_WAIT 0x40
#define MAP_PREFETCH 0x80
/* Use this just for bridge windows */
#define MAP_IOSPACE 0x20
typedef struct pccard_io_map {
u_char map;
u_char flags;
u_short speed;
ioaddr_t start, stop;
} pccard_io_map;
typedef struct pccard_mem_map {
u_char map;
u_char flags;
u_short speed;
u_long sys_start, sys_stop;
u_int card_start;
} pccard_mem_map;
typedef struct cb_bridge_map {
u_char map;
u_char flags;
u_int start, stop;
} cb_bridge_map;
// need the global function pointer struct? *TODO*
//************************************* end cc.h
#endif /* PCMCIA_H */