dasd_eckd.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Author(s)......: Holger Smolinski <[email protected]>
  4. * Horst Hummel <[email protected]>
  5. * Bugreports.to..: <[email protected]>
  6. * Copyright IBM Corp. 1999, 2000
  7. *
  8. */
  9. #ifndef DASD_ECKD_H
  10. #define DASD_ECKD_H
  11. /*****************************************************************************
  12. * SECTION: CCW Definitions
  13. ****************************************************************************/
  14. #define DASD_ECKD_CCW_NOP 0x03
  15. #define DASD_ECKD_CCW_WRITE 0x05
  16. #define DASD_ECKD_CCW_READ 0x06
  17. #define DASD_ECKD_CCW_WRITE_HOME_ADDRESS 0x09
  18. #define DASD_ECKD_CCW_READ_HOME_ADDRESS 0x0a
  19. #define DASD_ECKD_CCW_WRITE_KD 0x0d
  20. #define DASD_ECKD_CCW_READ_KD 0x0e
  21. #define DASD_ECKD_CCW_ERASE 0x11
  22. #define DASD_ECKD_CCW_READ_COUNT 0x12
  23. #define DASD_ECKD_CCW_SLCK 0x14
  24. #define DASD_ECKD_CCW_WRITE_RECORD_ZERO 0x15
  25. #define DASD_ECKD_CCW_READ_RECORD_ZERO 0x16
  26. #define DASD_ECKD_CCW_WRITE_CKD 0x1d
  27. #define DASD_ECKD_CCW_READ_CKD 0x1e
  28. #define DASD_ECKD_CCW_PSF 0x27
  29. #define DASD_ECKD_CCW_SNID 0x34
  30. #define DASD_ECKD_CCW_RSSD 0x3e
  31. #define DASD_ECKD_CCW_LOCATE_RECORD 0x47
  32. #define DASD_ECKD_CCW_LOCATE_RECORD_EXT 0x4b
  33. #define DASD_ECKD_CCW_SNSS 0x54
  34. #define DASD_ECKD_CCW_DEFINE_EXTENT 0x63
  35. #define DASD_ECKD_CCW_WRITE_MT 0x85
  36. #define DASD_ECKD_CCW_READ_MT 0x86
  37. #define DASD_ECKD_CCW_WRITE_KD_MT 0x8d
  38. #define DASD_ECKD_CCW_READ_KD_MT 0x8e
  39. #define DASD_ECKD_CCW_READ_COUNT_MT 0x92
  40. #define DASD_ECKD_CCW_RELEASE 0x94
  41. #define DASD_ECKD_CCW_WRITE_FULL_TRACK 0x95
  42. #define DASD_ECKD_CCW_READ_CKD_MT 0x9e
  43. #define DASD_ECKD_CCW_WRITE_CKD_MT 0x9d
  44. #define DASD_ECKD_CCW_WRITE_TRACK_DATA 0xA5
  45. #define DASD_ECKD_CCW_READ_TRACK_DATA 0xA6
  46. #define DASD_ECKD_CCW_RESERVE 0xB4
  47. #define DASD_ECKD_CCW_READ_TRACK 0xDE
  48. #define DASD_ECKD_CCW_PFX 0xE7
  49. #define DASD_ECKD_CCW_PFX_READ 0xEA
  50. #define DASD_ECKD_CCW_RSCK 0xF9
  51. #define DASD_ECKD_CCW_RCD 0xFA
  52. #define DASD_ECKD_CCW_DSO 0xF7
  53. /* Define Subsystem Function / Orders */
  54. #define DSO_ORDER_RAS 0x81
  55. /*
  56. * Perform Subsystem Function / Orders
  57. */
  58. #define PSF_ORDER_PRSSD 0x18
  59. #define PSF_ORDER_CUIR_RESPONSE 0x1A
  60. #define PSF_ORDER_SSC 0x1D
  61. /*
  62. * Perform Subsystem Function / Sub-Orders
  63. */
  64. #define PSF_SUBORDER_QHA 0x1C /* Query Host Access */
  65. #define PSF_SUBORDER_PPRCEQ 0x50 /* PPRC Extended Query */
  66. #define PSF_SUBORDER_VSQ 0x52 /* Volume Storage Query */
  67. #define PSF_SUBORDER_LCQ 0x53 /* Logical Configuration Query */
  68. /*
  69. * PPRC Extended Query Scopes
  70. */
  71. #define PPRCEQ_SCOPE_4 0x04 /* Scope 4 for PPRC Extended Query */
  72. /*
  73. * CUIR response condition codes
  74. */
  75. #define PSF_CUIR_INVALID 0x00
  76. #define PSF_CUIR_COMPLETED 0x01
  77. #define PSF_CUIR_NOT_SUPPORTED 0x02
  78. #define PSF_CUIR_ERROR_IN_REQ 0x03
  79. #define PSF_CUIR_DENIED 0x04
  80. #define PSF_CUIR_LAST_PATH 0x05
  81. #define PSF_CUIR_DEVICE_ONLINE 0x06
  82. #define PSF_CUIR_VARY_FAILURE 0x07
  83. #define PSF_CUIR_SOFTWARE_FAILURE 0x08
  84. #define PSF_CUIR_NOT_RECOGNIZED 0x09
  85. /*
  86. * CUIR codes
  87. */
  88. #define CUIR_QUIESCE 0x01
  89. #define CUIR_RESUME 0x02
  90. /*
  91. * Out-of-space (OOS) Codes
  92. */
  93. #define REPO_WARN 0x01
  94. #define REPO_EXHAUST 0x02
  95. #define POOL_WARN 0x03
  96. #define POOL_EXHAUST 0x04
  97. #define REPO_RELIEVE 0x05
  98. #define POOL_RELIEVE 0x06
  99. /*
  100. * attention message definitions
  101. */
  102. #define ATTENTION_LENGTH_CUIR 0x0e
  103. #define ATTENTION_FORMAT_CUIR 0x01
  104. #define ATTENTION_LENGTH_OOS 0x10
  105. #define ATTENTION_FORMAT_OOS 0x06
  106. #define DASD_ECKD_PG_GROUPED 0x10
  107. /*
  108. * Size that is reported for large volumes in the old 16-bit no_cyl field
  109. */
  110. #define LV_COMPAT_CYL 0xFFFE
  111. #define FCX_MAX_DATA_FACTOR 65536
  112. #define DASD_ECKD_RCD_DATA_SIZE 256
  113. #define DASD_ECKD_PATH_THRHLD 256
  114. #define DASD_ECKD_PATH_INTERVAL 300
  115. /*
  116. * Maximum number of blocks to be chained
  117. */
  118. #define DASD_ECKD_MAX_BLOCKS 190
  119. #define DASD_ECKD_MAX_BLOCKS_RAW 256
  120. /*****************************************************************************
  121. * SECTION: Type Definitions
  122. ****************************************************************************/
  123. struct eckd_count {
  124. __u16 cyl;
  125. __u16 head;
  126. __u8 record;
  127. __u8 kl;
  128. __u16 dl;
  129. } __attribute__ ((packed));
  130. struct ch_t {
  131. __u16 cyl;
  132. __u16 head;
  133. } __attribute__ ((packed));
  134. struct chr_t {
  135. __u16 cyl;
  136. __u16 head;
  137. __u8 record;
  138. } __attribute__ ((packed));
  139. struct DE_eckd_data {
  140. struct {
  141. unsigned char perm:2; /* Permissions on this extent */
  142. unsigned char reserved:1;
  143. unsigned char seek:2; /* Seek control */
  144. unsigned char auth:2; /* Access authorization */
  145. unsigned char pci:1; /* PCI Fetch mode */
  146. } __attribute__ ((packed)) mask;
  147. struct {
  148. unsigned char mode:2; /* Architecture mode */
  149. unsigned char ckd:1; /* CKD Conversion */
  150. unsigned char operation:3; /* Operation mode */
  151. unsigned char cfw:1; /* Cache fast write */
  152. unsigned char dfw:1; /* DASD fast write */
  153. } __attribute__ ((packed)) attributes;
  154. __u16 blk_size; /* Blocksize */
  155. __u16 fast_write_id;
  156. __u8 ga_additional; /* Global Attributes Additional */
  157. __u8 ga_extended; /* Global Attributes Extended */
  158. struct ch_t beg_ext;
  159. struct ch_t end_ext;
  160. unsigned long ep_sys_time; /* Ext Parameter - System Time Stamp */
  161. __u8 ep_format; /* Extended Parameter format byte */
  162. __u8 ep_prio; /* Extended Parameter priority I/O byte */
  163. __u8 ep_reserved1; /* Extended Parameter Reserved */
  164. __u8 ep_rec_per_track; /* Number of records on a track */
  165. __u8 ep_reserved[4]; /* Extended Parameter Reserved */
  166. } __attribute__ ((packed));
  167. struct LO_eckd_data {
  168. struct {
  169. unsigned char orientation:2;
  170. unsigned char operation:6;
  171. } __attribute__ ((packed)) operation;
  172. struct {
  173. unsigned char last_bytes_used:1;
  174. unsigned char reserved:6;
  175. unsigned char read_count_suffix:1;
  176. } __attribute__ ((packed)) auxiliary;
  177. __u8 unused;
  178. __u8 count;
  179. struct ch_t seek_addr;
  180. struct chr_t search_arg;
  181. __u8 sector;
  182. __u16 length;
  183. } __attribute__ ((packed));
  184. struct LRE_eckd_data {
  185. struct {
  186. unsigned char orientation:2;
  187. unsigned char operation:6;
  188. } __attribute__ ((packed)) operation;
  189. struct {
  190. unsigned char length_valid:1;
  191. unsigned char length_scope:1;
  192. unsigned char imbedded_ccw_valid:1;
  193. unsigned char check_bytes:2;
  194. unsigned char imbedded_count_valid:1;
  195. unsigned char reserved:1;
  196. unsigned char read_count_suffix:1;
  197. } __attribute__ ((packed)) auxiliary;
  198. __u8 imbedded_ccw;
  199. __u8 count;
  200. struct ch_t seek_addr;
  201. struct chr_t search_arg;
  202. __u8 sector;
  203. __u16 length;
  204. __u8 imbedded_count;
  205. __u8 extended_operation;
  206. __u16 extended_parameter_length;
  207. __u8 extended_parameter[];
  208. } __attribute__ ((packed));
  209. /* Prefix data for format 0x00 and 0x01 */
  210. struct PFX_eckd_data {
  211. unsigned char format;
  212. struct {
  213. unsigned char define_extent:1;
  214. unsigned char time_stamp:1;
  215. unsigned char verify_base:1;
  216. unsigned char hyper_pav:1;
  217. unsigned char reserved:4;
  218. } __attribute__ ((packed)) validity;
  219. __u8 base_address;
  220. __u8 aux;
  221. __u8 base_lss;
  222. __u8 reserved[7];
  223. struct DE_eckd_data define_extent;
  224. struct LRE_eckd_data locate_record;
  225. } __attribute__ ((packed));
  226. struct dasd_eckd_characteristics {
  227. __u16 cu_type;
  228. struct {
  229. unsigned char support:2;
  230. unsigned char async:1;
  231. unsigned char reserved:1;
  232. unsigned char cache_info:1;
  233. unsigned char model:3;
  234. } __attribute__ ((packed)) cu_model;
  235. __u16 dev_type;
  236. __u8 dev_model;
  237. struct {
  238. unsigned char mult_burst:1;
  239. unsigned char RT_in_LR:1;
  240. unsigned char reserved1:1;
  241. unsigned char RD_IN_LR:1;
  242. unsigned char reserved2:4;
  243. unsigned char reserved3:8;
  244. unsigned char defect_wr:1;
  245. unsigned char XRC_supported:1;
  246. unsigned char PPRC_enabled:1;
  247. unsigned char striping:1;
  248. unsigned char reserved5:4;
  249. unsigned char cfw:1;
  250. unsigned char reserved6:2;
  251. unsigned char cache:1;
  252. unsigned char dual_copy:1;
  253. unsigned char dfw:1;
  254. unsigned char reset_alleg:1;
  255. unsigned char sense_down:1;
  256. } __attribute__ ((packed)) facilities;
  257. __u8 dev_class;
  258. __u8 unit_type;
  259. __u16 no_cyl;
  260. __u16 trk_per_cyl;
  261. __u8 sec_per_trk;
  262. __u8 byte_per_track[3];
  263. __u16 home_bytes;
  264. __u8 formula;
  265. union {
  266. struct {
  267. __u8 f1;
  268. __u16 f2;
  269. __u16 f3;
  270. } __attribute__ ((packed)) f_0x01;
  271. struct {
  272. __u8 f1;
  273. __u8 f2;
  274. __u8 f3;
  275. __u8 f4;
  276. __u8 f5;
  277. } __attribute__ ((packed)) f_0x02;
  278. } __attribute__ ((packed)) factors;
  279. __u16 first_alt_trk;
  280. __u16 no_alt_trk;
  281. __u16 first_dia_trk;
  282. __u16 no_dia_trk;
  283. __u16 first_sup_trk;
  284. __u16 no_sup_trk;
  285. __u8 MDR_ID;
  286. __u8 OBR_ID;
  287. __u8 director;
  288. __u8 rd_trk_set;
  289. __u16 max_rec_zero;
  290. __u8 reserved1;
  291. __u8 RWANY_in_LR;
  292. __u8 factor6;
  293. __u8 factor7;
  294. __u8 factor8;
  295. __u8 reserved2[3];
  296. __u8 reserved3[6];
  297. __u32 long_no_cyl;
  298. } __attribute__ ((packed));
  299. /* elements of the configuration data */
  300. struct dasd_ned {
  301. struct {
  302. __u8 identifier:2;
  303. __u8 token_id:1;
  304. __u8 sno_valid:1;
  305. __u8 subst_sno:1;
  306. __u8 recNED:1;
  307. __u8 emuNED:1;
  308. __u8 reserved:1;
  309. } __attribute__ ((packed)) flags;
  310. __u8 descriptor;
  311. __u8 dev_class;
  312. __u8 reserved;
  313. __u8 dev_type[6];
  314. __u8 dev_model[3];
  315. __u8 HDA_manufacturer[3];
  316. struct {
  317. __u8 HDA_location[2];
  318. __u8 HDA_seqno[12];
  319. } serial;
  320. __u8 ID;
  321. __u8 unit_addr;
  322. } __attribute__ ((packed));
  323. struct dasd_sneq {
  324. struct {
  325. __u8 identifier:2;
  326. __u8 reserved:6;
  327. } __attribute__ ((packed)) flags;
  328. __u8 res1;
  329. __u16 format;
  330. __u8 res2[4]; /* byte 4- 7 */
  331. __u8 sua_flags; /* byte 8 */
  332. __u8 base_unit_addr; /* byte 9 */
  333. __u8 res3[22]; /* byte 10-31 */
  334. } __attribute__ ((packed));
  335. struct vd_sneq {
  336. struct {
  337. __u8 identifier:2;
  338. __u8 reserved:6;
  339. } __attribute__ ((packed)) flags;
  340. __u8 res1;
  341. __u16 format;
  342. __u8 res2[4]; /* byte 4- 7 */
  343. __u8 uit[16]; /* byte 8-23 */
  344. __u8 res3[8]; /* byte 24-31 */
  345. } __attribute__ ((packed));
  346. struct dasd_gneq {
  347. struct {
  348. __u8 identifier:2;
  349. __u8 reserved:6;
  350. } __attribute__ ((packed)) flags;
  351. __u8 record_selector;
  352. __u8 reserved[4];
  353. struct {
  354. __u8 value:2;
  355. __u8 number:6;
  356. } __attribute__ ((packed)) timeout;
  357. __u8 reserved3;
  358. __u16 subsystemID;
  359. __u8 reserved2[22];
  360. } __attribute__ ((packed));
  361. struct dasd_rssd_features {
  362. char feature[256];
  363. } __attribute__((packed));
  364. struct dasd_rssd_messages {
  365. __u16 length;
  366. __u8 format;
  367. __u8 code;
  368. __u32 message_id;
  369. __u8 flags;
  370. char messages[4087];
  371. } __packed;
  372. /*
  373. * Read Subsystem Data - Volume Storage Query
  374. */
  375. struct dasd_rssd_vsq {
  376. struct {
  377. __u8 tse:1;
  378. __u8 space_not_available:1;
  379. __u8 ese:1;
  380. __u8 unused:5;
  381. } __packed vol_info;
  382. __u8 unused1;
  383. __u16 extent_pool_id;
  384. __u8 warn_cap_limit;
  385. __u8 warn_cap_guaranteed;
  386. __u16 unused2;
  387. __u32 limit_capacity;
  388. __u32 guaranteed_capacity;
  389. __u32 space_allocated;
  390. __u32 space_configured;
  391. __u32 logical_capacity;
  392. } __packed;
  393. /*
  394. * Extent Pool Summary
  395. */
  396. struct dasd_ext_pool_sum {
  397. __u16 pool_id;
  398. __u8 repo_warn_thrshld;
  399. __u8 warn_thrshld;
  400. struct {
  401. __u8 type:1; /* 0 - CKD / 1 - FB */
  402. __u8 track_space_efficient:1;
  403. __u8 extent_space_efficient:1;
  404. __u8 standard_volume:1;
  405. __u8 extent_size_valid:1;
  406. __u8 capacity_at_warnlevel:1;
  407. __u8 pool_oos:1;
  408. __u8 unused0:1;
  409. __u8 unused1;
  410. } __packed flags;
  411. struct {
  412. __u8 reserved0:1;
  413. __u8 size_1G:1;
  414. __u8 reserved1:5;
  415. __u8 size_16M:1;
  416. } __packed extent_size;
  417. __u8 unused;
  418. } __packed;
  419. /*
  420. * Read Subsystem Data-Response - Logical Configuration Query - Header
  421. */
  422. struct dasd_rssd_lcq {
  423. __u16 data_length; /* Length of data returned */
  424. __u16 pool_count; /* Count of extent pools returned - Max: 448 */
  425. struct {
  426. __u8 pool_info_valid:1; /* Detailed Information valid */
  427. __u8 pool_id_volume:1;
  428. __u8 pool_id_cec:1;
  429. __u8 unused0:5;
  430. __u8 unused1;
  431. } __packed header_flags;
  432. char sfi_type[6]; /* Storage Facility Image Type (EBCDIC) */
  433. char sfi_model[3]; /* Storage Facility Image Model (EBCDIC) */
  434. __u8 sfi_seq_num[10]; /* Storage Facility Image Sequence Number */
  435. __u8 reserved[7];
  436. struct dasd_ext_pool_sum ext_pool_sum[448];
  437. } __packed;
  438. struct dasd_oos_message {
  439. __u16 length;
  440. __u8 format;
  441. __u8 code;
  442. __u8 percentage_empty;
  443. __u8 reserved;
  444. __u16 ext_pool_id;
  445. __u16 token;
  446. __u8 unused[6];
  447. } __packed;
  448. struct dasd_cuir_message {
  449. __u16 length;
  450. __u8 format;
  451. __u8 code;
  452. __u32 message_id;
  453. __u8 flags;
  454. __u8 neq_map[3];
  455. __u8 ned_map;
  456. __u8 record_selector;
  457. } __packed;
  458. struct dasd_psf_cuir_response {
  459. __u8 order;
  460. __u8 flags;
  461. __u8 cc;
  462. __u8 chpid;
  463. __u16 device_nr;
  464. __u16 reserved;
  465. __u32 message_id;
  466. __u64 system_id;
  467. __u8 cssid;
  468. __u8 ssid;
  469. } __packed;
  470. struct dasd_ckd_path_group_entry {
  471. __u8 status_flags;
  472. __u8 pgid[11];
  473. __u8 sysplex_name[8];
  474. __u32 timestamp;
  475. __u32 cylinder;
  476. __u8 reserved[4];
  477. } __packed;
  478. struct dasd_ckd_host_information {
  479. __u8 access_flags;
  480. __u8 entry_size;
  481. __u16 entry_count;
  482. __u8 entry[16390];
  483. } __packed;
  484. struct dasd_psf_query_host_access {
  485. __u8 access_flag;
  486. __u8 version;
  487. __u16 CKD_length;
  488. __u16 SCSI_length;
  489. __u8 unused[10];
  490. __u8 host_access_information[16394];
  491. } __packed;
  492. /*
  493. * Perform Subsystem Function - Prepare for Read Subsystem Data
  494. */
  495. struct dasd_psf_prssd_data {
  496. unsigned char order;
  497. unsigned char flags;
  498. unsigned char reserved1;
  499. unsigned char reserved2;
  500. unsigned char lss;
  501. unsigned char volume;
  502. unsigned char suborder;
  503. unsigned char varies[5];
  504. } __attribute__ ((packed));
  505. /*
  506. * Perform Subsystem Function - Set Subsystem Characteristics
  507. */
  508. struct dasd_psf_ssc_data {
  509. unsigned char order;
  510. unsigned char flags;
  511. unsigned char cu_type[4];
  512. unsigned char suborder;
  513. unsigned char reserved[59];
  514. } __attribute__((packed));
  515. /* Maximum number of extents for a single Release Allocated Space command */
  516. #define DASD_ECKD_RAS_EXTS_MAX 110U
  517. struct dasd_dso_ras_ext_range {
  518. struct ch_t beg_ext;
  519. struct ch_t end_ext;
  520. } __packed;
  521. /*
  522. * Define Subsystem Operation - Release Allocated Space
  523. */
  524. struct dasd_dso_ras_data {
  525. __u8 order;
  526. struct {
  527. __u8 message:1; /* Must be zero */
  528. __u8 reserved1:2;
  529. __u8 vol_type:1; /* 0 - CKD/FBA, 1 - FB */
  530. __u8 reserved2:4;
  531. } __packed flags;
  532. /* Operation Flags to specify scope */
  533. struct {
  534. __u8 reserved1:2;
  535. /* Release Space by Extent */
  536. __u8 by_extent:1; /* 0 - entire volume, 1 - specified extents */
  537. __u8 guarantee_init:1;
  538. __u8 force_release:1; /* Internal - will be ignored */
  539. __u16 reserved2:11;
  540. } __packed op_flags;
  541. __u8 lss;
  542. __u8 dev_addr;
  543. __u32 reserved1;
  544. __u8 reserved2[10];
  545. __u16 nr_exts; /* Defines number of ext_scope - max 110 */
  546. __u16 reserved3;
  547. } __packed;
  548. /*
  549. * some structures and definitions for alias handling
  550. */
  551. struct dasd_unit_address_configuration {
  552. struct {
  553. char ua_type;
  554. char base_ua;
  555. } unit[256];
  556. } __attribute__((packed));
  557. #define MAX_DEVICES_PER_LCU 256
  558. /* flags on the LCU */
  559. #define NEED_UAC_UPDATE 0x01
  560. #define UPDATE_PENDING 0x02
  561. enum pavtype {NO_PAV, BASE_PAV, HYPER_PAV};
  562. struct alias_root {
  563. struct list_head serverlist;
  564. spinlock_t lock;
  565. };
  566. struct alias_server {
  567. struct list_head server;
  568. struct dasd_uid uid;
  569. struct list_head lculist;
  570. };
  571. struct summary_unit_check_work_data {
  572. char reason;
  573. struct dasd_device *device;
  574. struct work_struct worker;
  575. };
  576. struct read_uac_work_data {
  577. struct dasd_device *device;
  578. struct delayed_work dwork;
  579. };
  580. struct alias_lcu {
  581. struct list_head lcu;
  582. struct dasd_uid uid;
  583. enum pavtype pav;
  584. char flags;
  585. spinlock_t lock;
  586. struct list_head grouplist;
  587. struct list_head active_devices;
  588. struct list_head inactive_devices;
  589. struct dasd_unit_address_configuration *uac;
  590. struct summary_unit_check_work_data suc_data;
  591. struct read_uac_work_data ruac_data;
  592. struct dasd_ccw_req *rsu_cqr;
  593. struct completion lcu_setup;
  594. };
  595. struct alias_pav_group {
  596. struct list_head group;
  597. struct dasd_uid uid;
  598. struct alias_lcu *lcu;
  599. struct list_head baselist;
  600. struct list_head aliaslist;
  601. struct dasd_device *next;
  602. };
  603. struct dasd_conf_data {
  604. struct dasd_ned neds[5];
  605. u8 reserved[64];
  606. struct dasd_gneq gneq;
  607. } __packed;
  608. struct dasd_conf {
  609. u8 *data;
  610. int len;
  611. /* pointers to specific parts in the conf_data */
  612. struct dasd_ned *ned;
  613. struct dasd_sneq *sneq;
  614. struct vd_sneq *vdsneq;
  615. struct dasd_gneq *gneq;
  616. };
  617. struct dasd_eckd_private {
  618. struct dasd_eckd_characteristics rdc_data;
  619. struct dasd_conf conf;
  620. struct eckd_count count_area[5];
  621. int init_cqr_status;
  622. int uses_cdl;
  623. struct attrib_data_t attrib; /* e.g. cache operations */
  624. struct dasd_rssd_features features;
  625. struct dasd_rssd_vsq vsq;
  626. struct dasd_ext_pool_sum eps;
  627. u32 real_cyl;
  628. /* alias management */
  629. struct dasd_uid uid;
  630. struct alias_pav_group *pavgroup;
  631. struct alias_lcu *lcu;
  632. int count;
  633. u32 fcx_max_data;
  634. char suc_reason;
  635. };
  636. int dasd_alias_make_device_known_to_lcu(struct dasd_device *);
  637. void dasd_alias_disconnect_device_from_lcu(struct dasd_device *);
  638. int dasd_alias_add_device(struct dasd_device *);
  639. int dasd_alias_remove_device(struct dasd_device *);
  640. struct dasd_device *dasd_alias_get_start_dev(struct dasd_device *);
  641. void dasd_alias_handle_summary_unit_check(struct work_struct *);
  642. void dasd_eckd_reset_ccw_to_base_io(struct dasd_ccw_req *);
  643. int dasd_alias_update_add_device(struct dasd_device *);
  644. #endif /* DASD_ECKD_H */