8 #define CSR_FCP_COMMAND 0xfffff0000b00ull
9 #define CSR_FCP_RESPONSE 0xfffff0000d00ull
11 static const char *
const ctype_names[] = {
12 [0x0] =
"control", [0x8] =
"not implemented",
13 [0x1] =
"status", [0x9] =
"accepted",
14 [0x2] =
"specific inquiry", [0xa] =
"rejected",
15 [0x3] =
"notify", [0xb] =
"in transition",
16 [0x4] =
"general inquiry", [0xc] =
"stable",
17 [0x5] =
"(reserved 0x05)", [0xd] =
"changed",
18 [0x6] =
"(reserved 0x06)", [0xe] =
"(reserved 0x0e)",
19 [0x7] =
"(reserved 0x07)", [0xf] =
"interim",
22 static const char *
const subunit_type_names[] = {
23 [0x00] =
"monitor", [0x10] =
"(reserved 0x10)",
24 [0x01] =
"audio", [0x11] =
"(reserved 0x11)",
25 [0x02] =
"printer", [0x12] =
"(reserved 0x12)",
26 [0x03] =
"disc", [0x13] =
"(reserved 0x13)",
27 [0x04] =
"tape recorder/player",[0x14] =
"(reserved 0x14)",
28 [0x05] =
"tuner", [0x15] =
"(reserved 0x15)",
29 [0x06] =
"ca", [0x16] =
"(reserved 0x16)",
30 [0x07] =
"camera", [0x17] =
"(reserved 0x17)",
31 [0x08] =
"(reserved 0x08)", [0x18] =
"(reserved 0x18)",
32 [0x09] =
"panel", [0x19] =
"(reserved 0x19)",
33 [0x0a] =
"bulletin board", [0x1a] =
"(reserved 0x1a)",
34 [0x0b] =
"camera storage", [0x1b] =
"(reserved 0x1b)",
35 [0x0c] =
"(reserved 0x0c)", [0x1c] =
"vendor unique",
36 [0x0d] =
"(reserved 0x0d)", [0x1d] =
"all subunit types",
37 [0x0e] =
"(reserved 0x0e)", [0x1e] =
"subunit_type extended to next byte",
38 [0x0f] =
"(reserved 0x0f)", [0x1f] =
"unit",
70 {
"state", 0, 8, power_field_names }
73 [0x30] = {
"unit info", {
75 {
"unit_type", 8, 5 },
77 {
"company id", 16, 24 },
80 [0x31] = {
"subunit info" },
81 [0x01] = {
"reserve" },
82 [0xb0] = {
"version" },
83 [0x00] = {
"vendor dependent" },
84 [0x02] = {
"plug info" },
85 [0x12] = {
"channel usage" },
86 [0x24] = {
"connect" },
87 [0x20] = {
"connect av" },
88 [0x22] = {
"connections" },
89 [0x11] = {
"digital input" },
90 [0x10] = {
"digital output" },
91 [0x25] = {
"disconnect" },
92 [0x21] = {
"disconnect av" },
93 [0x19] = {
"input plug signal format" },
94 [0x18] = {
"output plug signal format" },
95 [0x1f] = {
"general bus setup" },
99 [0x0c] = {
"create descriptor" },
100 [0x08] = {
"open descriptor" },
101 [0x09] = {
"read descriptor" },
102 [0x0a] = {
"write descriptor" },
103 [0x05] = {
"open info block" },
104 [0x06] = {
"read info block" },
105 [0x07] = {
"write info block" },
106 [0x0b] = {
"search descriptor" },
107 [0x0d] = {
"object number select" },
112 {
"subfunction", 0, 8 },
114 {
"plug_type", 16, 8 },
115 {
"plug_id", 16, 8 },
121 [0xb8] = {
"function block" },
125 [0x7d] = {
"gui update" },
126 [0x7e] = {
"push gui data" },
127 [0x7f] = {
"user action" },
128 [0x7c] = {
"pass through" },
131 [0x26] = {
"asynchronous connection" },
156 "(unknown opcode 0x%02x)", frame->
opcode);
162 printf(
"av/c %s, subunit_type=%s, subunit_id=%d, opcode=%s",
177 unsigned long long offset =
178 ((
unsigned long long) t->
request->packet.common.offset_high << 32) |
179 t->
request->packet.common.offset_low;
185 switch (frame->
cts) {
190 printf(
"cal fcp frame (cts=0x01)\n");
193 printf(
"ehs fcp frame (cts=0x02)\n");
196 printf(
"havi fcp frame (cts=0x03)\n");
199 printf(
"vendor specific fcp frame (cts=0x0e)\n");
205 printf(
"reserved fcp frame (ctx=0x%02x)\n", frame->
cts);