Linux-libre 5.4.49-gnu
[librecmc/linux-libre.git] / arch / arm / mach-rpc / ecard.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  *  ecard.h
4  *
5  *  Copyright 2007 Russell King
6  */
7
8 /* Definitions internal to ecard.c - for it's use only!!
9  *
10  * External expansion card header as read from the card
11  */
12 struct ex_ecid {
13         unsigned char   r_irq:1;
14         unsigned char   r_zero:1;
15         unsigned char   r_fiq:1;
16         unsigned char   r_id:4;
17         unsigned char   r_a:1;
18
19         unsigned char   r_cd:1;
20         unsigned char   r_is:1;
21         unsigned char   r_w:2;
22         unsigned char   r_r1:4;
23
24         unsigned char   r_r2:8;
25
26         unsigned char   r_prod[2];
27
28         unsigned char   r_manu[2];
29
30         unsigned char   r_country;
31
32         unsigned char   r_fiqmask;
33         unsigned char   r_fiqoff[3];
34
35         unsigned char   r_irqmask;
36         unsigned char   r_irqoff[3];
37 };
38
39 /*
40  * Chunk directory entry as read from the card
41  */
42 struct ex_chunk_dir {
43         unsigned char r_id;
44         unsigned char r_len[3];
45         unsigned long r_start;
46         union {
47                 char string[256];
48                 char data[1];
49         } d;
50 #define c_id(x)         ((x)->r_id)
51 #define c_len(x)        ((x)->r_len[0]|((x)->r_len[1]<<8)|((x)->r_len[2]<<16))
52 #define c_start(x)      ((x)->r_start)
53 };
54
55 typedef enum ecard_type {               /* Cards address space          */
56         ECARD_IOC,
57         ECARD_MEMC,
58         ECARD_EASI
59 } card_type_t;
60
61 typedef enum {                          /* Speed for ECARD_IOC space    */
62         ECARD_SLOW       = 0,
63         ECARD_MEDIUM     = 1,
64         ECARD_FAST       = 2,
65         ECARD_SYNC       = 3
66 } card_speed_t;