lib: remove unused libfru & libfrureg
[unleashed.git] / usr / src / lib / libfruutils / fru_tag.h
blob3c5d6c1f6557794855ea1a270177e54f8d37ab50
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
28 #ifndef _FRU_TAG_H
29 #define _FRU_TAG_H
31 #include <sys/types.h>
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
37 #if defined(_LITTLE_ENDIAN)
39 typedef union {
40 uint64_t raw_data;
41 unsigned char byte[8];
42 struct {
43 unsigned pl_len : 3;
44 unsigned dense : 4;
45 unsigned type : 1;
46 } a;
47 struct {
48 unsigned pl_len : 3;
49 unsigned dense : 11;
50 unsigned type : 2;
51 } b;
52 struct {
53 unsigned pl_len : 5;
54 unsigned dense : 8;
55 unsigned type : 3;
56 } c;
57 struct {
58 unsigned pl_len : 3;
59 unsigned dense : 17;
60 unsigned type : 4;
61 } d;
62 struct {
63 unsigned pl_len : 7;
64 unsigned dense : 12;
65 unsigned type : 5;
66 } e;
67 struct {
68 unsigned pl_len : 12;
69 unsigned dense : 14;
70 unsigned type : 6;
71 } f;
72 struct {
73 unsigned pl_len : 32;
74 unsigned dense : 9;
75 unsigned type : 7;
76 } g;
77 } fru_tag_t;
79 #else
81 typedef union {
82 uint64_t raw_data;
83 char byte[8];
84 struct {
85 unsigned type : 1;
86 unsigned dense : 4;
87 unsigned pl_len : 3;
88 } a;
89 struct {
90 unsigned type : 2;
91 unsigned dense : 11;
92 unsigned pl_len : 3;
93 } b;
94 struct {
95 unsigned type : 3;
96 unsigned dense : 8;
97 unsigned pl_len : 5;
98 } c;
99 struct {
100 unsigned type : 4;
101 unsigned dense : 17;
102 unsigned pl_len : 3;
103 } d;
104 struct {
105 unsigned type : 5;
106 unsigned dense : 12;
107 unsigned pl_len : 7;
108 } e;
109 struct {
110 unsigned type : 6;
111 unsigned dense : 14;
112 unsigned pl_len : 12;
113 } f;
114 struct {
115 unsigned type : 7;
116 unsigned dense : 9;
117 unsigned pl_len : 32;
118 } g;
119 } fru_tag_t;
121 #endif /* LITTLE_ENDIAN */
123 #define FRU_ID_MASK 0xFF
124 #define FRU_A_ID 0x00
125 #define FRU_B_ID 0x02
126 #define FRU_C_ID 0x06
127 #define FRU_D_ID 0x0E
128 #define FRU_E_ID 0x1E
129 #define FRU_F_ID 0x3E
130 #define FRU_G_ID 0x7E
132 typedef enum { FRU_A = 0x00, FRU_B = 0x80, FRU_C = 0xc0,
133 FRU_D = 0xe0, FRU_E = 0xf0, FRU_F = 0xf8,
134 FRU_G = 0xfc, FRU_X = 0xfe } fru_tagtype_t;
135 char *get_tagtype_str(fru_tagtype_t e);
136 size_t get_tag_size(fru_tagtype_t tag);
138 /* Returns -1 on error */
139 int mk_tag(fru_tagtype_t type, uint32_t dense, size_t pl_len,
140 fru_tag_t *tag);
142 fru_tagtype_t get_tag_type(fru_tag_t *tag);
143 uint32_t get_tag_dense(fru_tag_t *tag);
144 size_t get_payload_length(fru_tag_t *tag);
146 /* Returns 1 if equal, 0 if not */
147 int tags_equal(fru_tag_t t1, fru_tag_t t2);
149 #ifdef __cplusplus
151 #endif
153 #endif /* _FRU_TAG_H */