/* | |
* ecard.h | |
* | |
* Copyright 2007 Russell King | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 2 as | |
* published by the Free Software Foundation. | |
*/ | |
/* Definitions internal to ecard.c - for it's use only!! | |
* | |
* External expansion card header as read from the card | |
*/ | |
struct ex_ecid { | |
unsigned char r_irq:1; | |
unsigned char r_zero:1; | |
unsigned char r_fiq:1; | |
unsigned char r_id:4; | |
unsigned char r_a:1; | |
unsigned char r_cd:1; | |
unsigned char r_is:1; | |
unsigned char r_w:2; | |
unsigned char r_r1:4; | |
unsigned char r_r2:8; | |
unsigned char r_prod[2]; | |
unsigned char r_manu[2]; | |
unsigned char r_country; | |
unsigned char r_fiqmask; | |
unsigned char r_fiqoff[3]; | |
unsigned char r_irqmask; | |
unsigned char r_irqoff[3]; | |
}; | |
/* | |
* Chunk directory entry as read from the card | |
*/ | |
struct ex_chunk_dir { | |
unsigned char r_id; | |
unsigned char r_len[3]; | |
unsigned long r_start; | |
union { | |
char string[256]; | |
char data[1]; | |
} d; | |
#define c_id(x) ((x)->r_id) | |
#define c_len(x) ((x)->r_len[0]|((x)->r_len[1]<<8)|((x)->r_len[2]<<16)) | |
#define c_start(x) ((x)->r_start) | |
}; | |
typedef enum ecard_type { /* Cards address space */ | |
ECARD_IOC, | |
ECARD_MEMC, | |
ECARD_EASI | |
} card_type_t; | |
typedef enum { /* Speed for ECARD_IOC space */ | |
ECARD_SLOW = 0, | |
ECARD_MEDIUM = 1, | |
ECARD_FAST = 2, | |
ECARD_SYNC = 3 | |
} card_speed_t; |