Home | History | Annotate | Line # | Download | only in ieee1394
      1  1.6     htodd /*	$NetBSD: iec13213.h,v 1.6 2014/03/28 04:09:19 htodd Exp $	*/
      2  1.1  kiyohara /*-
      3  1.1  kiyohara  * Copyright (c) 2003 Hidetoshi Shimokawa
      4  1.1  kiyohara  * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa
      5  1.1  kiyohara  * All rights reserved.
      6  1.1  kiyohara  *
      7  1.1  kiyohara  * Redistribution and use in source and binary forms, with or without
      8  1.1  kiyohara  * modification, are permitted provided that the following conditions
      9  1.1  kiyohara  * are met:
     10  1.1  kiyohara  * 1. Redistributions of source code must retain the above copyright
     11  1.1  kiyohara  *    notice, this list of conditions and the following disclaimer.
     12  1.1  kiyohara  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  kiyohara  *    notice, this list of conditions and the following disclaimer in the
     14  1.1  kiyohara  *    documentation and/or other materials provided with the distribution.
     15  1.1  kiyohara  * 3. All advertising materials mentioning features or use of this software
     16  1.1  kiyohara  *    must display the acknowledgement as bellow:
     17  1.1  kiyohara  *
     18  1.1  kiyohara  *    This product includes software developed by K. Kobayashi and H. Shimokawa
     19  1.1  kiyohara  *
     20  1.1  kiyohara  * 4. The name of the author may not be used to endorse or promote products
     21  1.1  kiyohara  *    derived from this software without specific prior written permission.
     22  1.1  kiyohara  *
     23  1.1  kiyohara  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     24  1.1  kiyohara  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     25  1.1  kiyohara  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     26  1.1  kiyohara  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
     27  1.1  kiyohara  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     28  1.1  kiyohara  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     29  1.1  kiyohara  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     30  1.1  kiyohara  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     31  1.1  kiyohara  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
     32  1.1  kiyohara  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     33  1.1  kiyohara  * POSSIBILITY OF SUCH DAMAGE.
     34  1.4  kiyohara  *
     35  1.1  kiyohara  * $FreeBSD: /repoman/r/ncvs/src/sys/dev/firewire/iec13213.h,v 1.14 2005/01/06 01:42:41 imp Exp $
     36  1.1  kiyohara  *
     37  1.1  kiyohara  */
     38  1.1  kiyohara 
     39  1.4  kiyohara #ifndef _IEC13213_H_
     40  1.4  kiyohara #define _IEC13213_H_
     41  1.4  kiyohara 
     42  1.1  kiyohara #define	STATE_CLEAR	0x0000
     43  1.1  kiyohara #define	STATE_SET	0x0004
     44  1.1  kiyohara #define	NODE_IDS	0x0008
     45  1.1  kiyohara #define	RESET_START	0x000c
     46  1.1  kiyohara #define	SPLIT_TIMEOUT_HI	0x0018
     47  1.1  kiyohara #define	SPLIT_TIMEOUT_LO	0x001c
     48  1.1  kiyohara #define	CYCLE_TIME	0x0200
     49  1.1  kiyohara #define	BUS_TIME	0x0204
     50  1.1  kiyohara #define	BUSY_TIMEOUT	0x0210
     51  1.1  kiyohara #define	PRIORITY_BUDGET 0x0218
     52  1.1  kiyohara #define	BUS_MGR_ID	0x021c
     53  1.1  kiyohara #define	BANDWIDTH_AV	0x0220
     54  1.1  kiyohara #define	CHANNELS_AV_HI	0x0224
     55  1.1  kiyohara #define	CHANNELS_AV_LO	0x0228
     56  1.1  kiyohara #define	IP_CHANNELS	0x0234
     57  1.1  kiyohara 
     58  1.1  kiyohara #define	CONF_ROM	0x0400
     59  1.1  kiyohara 
     60  1.1  kiyohara #define	TOPO_MAP	0x1000
     61  1.1  kiyohara #define	SPED_MAP	0x2000
     62  1.1  kiyohara 
     63  1.1  kiyohara #define CSRTYPE_SHIFT	6
     64  1.1  kiyohara #define CSRTYPE_MASK	(3 << CSRTYPE_SHIFT)
     65  1.1  kiyohara #define CSRTYPE_I	(0 << CSRTYPE_SHIFT) /* Immediate */
     66  1.1  kiyohara #define CSRTYPE_C	(1 << CSRTYPE_SHIFT) /* CSR offset */
     67  1.1  kiyohara #define CSRTYPE_L	(2 << CSRTYPE_SHIFT) /* Leaf */
     68  1.1  kiyohara #define CSRTYPE_D	(3 << CSRTYPE_SHIFT) /* Directory */
     69  1.1  kiyohara 
     70  1.1  kiyohara /*
     71  1.1  kiyohara  * CSR keys
     72  1.1  kiyohara  * 00 - 2F: defined by CSR architecture standards.
     73  1.1  kiyohara  * 30 - 37: defined by BUS starndards
     74  1.1  kiyohara  * 38 - 3F: defined by Vendor/Specifier
     75  1.1  kiyohara  */
     76  1.1  kiyohara #define CSRKEY_MASK	0x3f
     77  1.1  kiyohara #define CSRKEY_DESC	0x01 /* Descriptor */
     78  1.1  kiyohara #define CSRKEY_BDINFO	0x02 /* Bus_Dependent_Info */
     79  1.1  kiyohara #define CSRKEY_VENDOR	0x03 /* Vendor */
     80  1.1  kiyohara #define CSRKEY_HW	0x04 /* Hardware_Version */
     81  1.1  kiyohara #define CSRKEY_MODULE	0x07 /* Module */
     82  1.1  kiyohara #define CSRKEY_NCAP	0x0c /* Node_Capabilities */
     83  1.1  kiyohara #define CSRKEY_EUI64	0x0d /* EUI_64 */
     84  1.1  kiyohara #define CSRKEY_UNIT	0x11 /* Unit */
     85  1.1  kiyohara #define CSRKEY_SPEC	0x12 /* Specifier_ID */
     86  1.1  kiyohara #define CSRKEY_VER	0x13 /* Version */
     87  1.1  kiyohara #define CSRKEY_DINFO	0x14 /* Dependent_Info */
     88  1.1  kiyohara #define CSRKEY_ULOC	0x15 /* Unit_Location */
     89  1.1  kiyohara #define CSRKEY_MODEL	0x17 /* Model */
     90  1.1  kiyohara #define CSRKEY_INST	0x18 /* Instance */
     91  1.1  kiyohara #define CSRKEY_KEYW	0x19 /* Keyword */
     92  1.1  kiyohara #define CSRKEY_FEAT	0x1a /* Feature */
     93  1.1  kiyohara #define CSRKEY_EROM	0x1b /* Extended_ROM */
     94  1.1  kiyohara #define CSRKEY_EKSID	0x1c /* Extended_Key_Specifier_ID */
     95  1.1  kiyohara #define CSRKEY_EKEY	0x1d /* Extended_Key */
     96  1.1  kiyohara #define CSRKEY_EDATA	0x1e /* Extended_Data */
     97  1.1  kiyohara #define CSRKEY_MDESC	0x1f /* Modifiable_Descriptor */
     98  1.1  kiyohara #define CSRKEY_DID	0x20 /* Directory_ID */
     99  1.1  kiyohara #define CSRKEY_REV	0x21 /* Revision */
    100  1.1  kiyohara 
    101  1.1  kiyohara #define CSRKEY_FIRM_VER	0x3c /* Firmware version */
    102  1.1  kiyohara #define CSRKEY_UNIT_CH	0x3a /* Unit characteristics */
    103  1.1  kiyohara #define CSRKEY_COM_SPEC	0x38 /* Command set revision */
    104  1.1  kiyohara #define CSRKEY_COM_SET	0x39 /* Command set */
    105  1.1  kiyohara 
    106  1.1  kiyohara #define CROM_UDIR	(CSRTYPE_D | CSRKEY_UNIT)  /* 0x81 Unit directory */
    107  1.1  kiyohara #define CROM_TEXTLEAF	(CSRTYPE_L | CSRKEY_DESC)  /* 0x81 Text leaf */
    108  1.5    cegger #define CROM_TEXTLEAF2	(CSRTYPE_L | CSRKEY_BDINFO)/* 0x82 Text leaf2 */
    109  1.1  kiyohara #define CROM_LUN	(CSRTYPE_I | CSRKEY_DINFO) /* 0x14 Logical unit num. */
    110  1.1  kiyohara #define CROM_MGM	(CSRTYPE_C | CSRKEY_DINFO) /* 0x54 Management agent */
    111  1.5    cegger #define CROM_NODEID	0x8d /* only valid for IEEE 1394-1995 digital camera */
    112  1.1  kiyohara 
    113  1.1  kiyohara #define CSRVAL_VENDOR_PRIVATE	0xacde48
    114  1.1  kiyohara #define CSRVAL_1394TA	0x00a02d
    115  1.1  kiyohara #define CSRVAL_ANSIT10	0x00609e
    116  1.1  kiyohara #define CSRVAL_IETF	0x00005e
    117  1.1  kiyohara 
    118  1.1  kiyohara #define CSR_PROTAVC	0x010001
    119  1.1  kiyohara #define CSR_PROTCAL	0x010002
    120  1.1  kiyohara #define CSR_PROTEHS	0x010004
    121  1.1  kiyohara #define CSR_PROTHAVI	0x010008
    122  1.1  kiyohara #define CSR_PROTCAM104	0x000100
    123  1.1  kiyohara #define CSR_PROTCAM120	0x000101
    124  1.1  kiyohara #define CSR_PROTCAM130	0x000102
    125  1.1  kiyohara #define CSR_PROTDPP	0x0a6be2
    126  1.1  kiyohara #define CSR_PROTIICP	0x4b661f
    127  1.1  kiyohara 
    128  1.1  kiyohara #define CSRVAL_T10SBP2	0x010483
    129  1.1  kiyohara #define CSRVAL_SCSI	0x0104d8
    130  1.1  kiyohara 
    131  1.1  kiyohara struct csrreg {
    132  1.1  kiyohara #if BYTE_ORDER == BIG_ENDIAN
    133  1.1  kiyohara 	uint32_t key:8,
    134  1.1  kiyohara 		 val:24;
    135  1.1  kiyohara #else
    136  1.1  kiyohara 	uint32_t val:24,
    137  1.1  kiyohara 		 key:8;
    138  1.1  kiyohara #endif
    139  1.1  kiyohara };
    140  1.1  kiyohara struct csrhdr {
    141  1.1  kiyohara #if BYTE_ORDER == BIG_ENDIAN
    142  1.1  kiyohara 	uint32_t info_len:8,
    143  1.1  kiyohara 		 crc_len:8,
    144  1.1  kiyohara 		 crc:16;
    145  1.1  kiyohara #else
    146  1.1  kiyohara 	uint32_t crc:16,
    147  1.1  kiyohara 		 crc_len:8,
    148  1.1  kiyohara 		 info_len:8;
    149  1.1  kiyohara #endif
    150  1.1  kiyohara };
    151  1.1  kiyohara struct csrdirectory {
    152  1.1  kiyohara 	BIT16x2(crc_len, crc);
    153  1.1  kiyohara 	struct csrreg entry[0];
    154  1.1  kiyohara };
    155  1.1  kiyohara struct csrtext {
    156  1.1  kiyohara 	BIT16x2(crc_len, crc);
    157  1.1  kiyohara #if BYTE_ORDER == BIG_ENDIAN
    158  1.1  kiyohara 	uint32_t spec_type:8,
    159  1.1  kiyohara 		 spec_id:24;
    160  1.1  kiyohara #else
    161  1.1  kiyohara 	uint32_t spec_id:24,
    162  1.1  kiyohara 		 spec_type:8;
    163  1.1  kiyohara #endif
    164  1.1  kiyohara 	uint32_t lang_id;
    165  1.1  kiyohara 	uint32_t text[0];
    166  1.1  kiyohara };
    167  1.1  kiyohara 
    168  1.1  kiyohara struct bus_info {
    169  1.1  kiyohara #define	CSR_BUS_NAME_IEEE1394	0x31333934
    170  1.4  kiyohara 	uint32_t bus_name;
    171  1.1  kiyohara #if BYTE_ORDER == BIG_ENDIAN
    172  1.1  kiyohara 	uint32_t irmc:1,		/* iso. resource manager capable */
    173  1.1  kiyohara 		 cmc:1,			/* cycle master capable */
    174  1.1  kiyohara 		 isc:1,			/* iso. operation support */
    175  1.1  kiyohara 		 bmc:1,			/* bus manager capable */
    176  1.1  kiyohara 		 pmc:1,			/* power manager capable */
    177  1.1  kiyohara 		 :3,
    178  1.1  kiyohara 		 cyc_clk_acc:8,		/* 0 <= ppm <= 100 */
    179  1.1  kiyohara 		 max_rec:4,		/* (2 << max_rec) bytes */
    180  1.1  kiyohara 		 :2,
    181  1.1  kiyohara 		 max_rom:2,
    182  1.1  kiyohara 		 generation:4,
    183  1.1  kiyohara 		 :1,
    184  1.1  kiyohara 		 link_spd:3;
    185  1.1  kiyohara #else
    186  1.1  kiyohara 	uint32_t link_spd:3,
    187  1.1  kiyohara 		 :1,
    188  1.1  kiyohara 		 generation:4,
    189  1.1  kiyohara 		 max_rom:2,
    190  1.1  kiyohara 		 :2,
    191  1.1  kiyohara 		 max_rec:4,		/* (2 << max_rec) bytes */
    192  1.1  kiyohara 		 cyc_clk_acc:8,		/* 0 <= ppm <= 100 */
    193  1.1  kiyohara 		 :3,
    194  1.1  kiyohara 		 pmc:1,			/* power manager capable */
    195  1.1  kiyohara 		 bmc:1,			/* bus manager capable */
    196  1.1  kiyohara 		 isc:1,			/* iso. operation support */
    197  1.1  kiyohara 		 cmc:1,			/* cycle master capable */
    198  1.1  kiyohara 		 irmc:1;		/* iso. resource manager capable */
    199  1.1  kiyohara #endif
    200  1.1  kiyohara 	struct fw_eui64 eui64;
    201  1.1  kiyohara };
    202  1.1  kiyohara /* max_rom */
    203  1.1  kiyohara #define MAXROM_4	0
    204  1.1  kiyohara #define MAXROM_64	1
    205  1.1  kiyohara #define MAXROM_1024	2
    206  1.1  kiyohara 
    207  1.1  kiyohara #define CROM_MAX_DEPTH	10
    208  1.1  kiyohara struct crom_ptr {
    209  1.1  kiyohara 	struct csrdirectory *dir;
    210  1.1  kiyohara 	int index;
    211  1.1  kiyohara };
    212  1.1  kiyohara 
    213  1.1  kiyohara struct crom_context {
    214  1.1  kiyohara 	int depth;
    215  1.1  kiyohara 	struct crom_ptr stack[CROM_MAX_DEPTH];
    216  1.1  kiyohara };
    217  1.1  kiyohara 
    218  1.1  kiyohara void crom_init_context(struct crom_context *, uint32_t *);
    219  1.1  kiyohara struct csrreg *crom_get(struct crom_context *);
    220  1.1  kiyohara void crom_next(struct crom_context *);
    221  1.1  kiyohara void crom_parse_text(struct crom_context *, char *, int);
    222  1.1  kiyohara uint16_t crom_crc(uint32_t *r, int);
    223  1.1  kiyohara struct csrreg *crom_search_key(struct crom_context *, uint8_t);
    224  1.1  kiyohara int crom_has_specver(uint32_t *, uint32_t, uint32_t);
    225  1.1  kiyohara 
    226  1.1  kiyohara #ifndef _KERNEL
    227  1.6     htodd const char *crom_desc(struct crom_context *, char *, size_t);
    228  1.1  kiyohara #endif
    229  1.1  kiyohara 
    230  1.1  kiyohara /* For CROM build */
    231  1.1  kiyohara #if defined(_KERNEL) || defined(TEST)
    232  1.1  kiyohara #define CROM_MAX_CHUNK_LEN 20
    233  1.1  kiyohara struct crom_src {
    234  1.1  kiyohara 	struct csrhdr hdr;
    235  1.1  kiyohara 	struct bus_info businfo;
    236  1.1  kiyohara 	STAILQ_HEAD(, crom_chunk) chunk_list;
    237  1.1  kiyohara };
    238  1.1  kiyohara 
    239  1.1  kiyohara struct crom_chunk {
    240  1.1  kiyohara 	STAILQ_ENTRY(crom_chunk) link;
    241  1.4  kiyohara 	struct crom_chunk *ref_chunk;
    242  1.4  kiyohara 	int ref_index;
    243  1.1  kiyohara 	int offset;
    244  1.1  kiyohara 	struct {
    245  1.1  kiyohara 		BIT16x2(crc_len, crc);
    246  1.4  kiyohara 		uint32_t buf[CROM_MAX_CHUNK_LEN];
    247  1.1  kiyohara 	} data;
    248  1.1  kiyohara };
    249  1.1  kiyohara 
    250  1.1  kiyohara extern int crom_add_quad(struct crom_chunk *, uint32_t);
    251  1.1  kiyohara extern int crom_add_entry(struct crom_chunk *, int, int);
    252  1.1  kiyohara extern int crom_add_chunk(struct crom_src *src, struct crom_chunk *,
    253  1.1  kiyohara 					struct crom_chunk *, int);
    254  1.1  kiyohara extern int crom_add_simple_text(struct crom_src *src, struct crom_chunk *,
    255  1.1  kiyohara 					struct crom_chunk *, const char *);
    256  1.1  kiyohara extern int crom_load(struct crom_src *, uint32_t *, int);
    257  1.1  kiyohara #endif
    258  1.4  kiyohara 
    259  1.4  kiyohara #endif	/* _IEC13213_H_ */
    260