Changeset 215 for trunk/hal/x86_64/drivers/ioc_ata.h
- Timestamp:
- Jul 17, 2017, 1:41:13 PM (7 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/hal/x86_64/drivers/ioc_ata.h
r207 r215 1 1 /* 2 * soclib_bdv.h - SOCLIB_BDV (simple block device) driver definition.2 * ioc_ata.c - ATA driver definitions 3 3 * 4 * Author Alain Greiner 5 * 6 * Copyright (c) UPMC Sorbonne Universites 4 * Copyright (c) 2017 Maxime Villard 7 5 * 8 6 * This file is part of ALMOS-MKH. … … 22 20 */ 23 21 24 #ifndef _ SOCLIB_BDV_H_25 #define _ SOCLIB_BDV_H_22 #ifndef _IOC_ATA_H_ 23 #define _IOC_ATA_H_ 26 24 27 25 #include <chdev.h> 28 26 #include <hal_types.h> 29 27 30 /******************************************************************************************** 31 * This driver supports the SocLib VciBlockDevice component, that is a simgle channel, 32 * block oriented, external storage controler, supporting only one I/O transaction, 33 * at a given time. 34 *******************************************************************************************/ 28 void ioc_ata_init(chdev_t *chdev); 35 29 36 /******************************************************************************************** 37 * SOCLIB_BDV registers offset 38 *******************************************************************************************/ 39 40 enum SoclibBlockDeviceRegisters 41 { 42 BDV_BUFFER_REG = 0, 43 BDV_LBA_REG = 1, 44 BDV_COUNT_REG = 2, 45 BDV_OP_REG = 3, 46 BDV_STATUS_REG = 4, 47 BDV_IRQ_ENABLE_REG = 5, 48 BDV_SIZE_REG = 6, 49 BDV_BLOCK_SIZE_REG = 7, 50 BDV_BUFFER_EXT_REG = 8, 51 }; 52 53 /******************************************************************************************** 54 * SOCLIB_BDV status values 55 *******************************************************************************************/ 56 57 #define BDV_IDLE 0 58 #define BDV_BUSY 1 59 #define BDV_READ_SUCCESS 2 60 #define BDV_WRITE_SUCCESS 3 61 #define BDV_READ_ERROR 4 62 #define BDV_WRITE_ERROR 5 63 #define BDV_ERROR 6 64 65 /******************************************************************************************** 66 * SOCLIB_BDV operations 67 *******************************************************************************************/ 68 69 #define BDV_OP_NOP 0 70 #define BDV_OP_READ 1 71 #define BDV_OP_WRITE 2 72 73 /******************************************************************************************** 74 * This function access the SOCLIB_BDV hardware registers to get the block size and the 75 * number of blocks, and initialises the "extension" field of the IOC device descriptor. 76 ******************************************************************************************** 77 * @ chdev : local pointer on the generic IOC chdev descriptor. 78 *******************************************************************************************/ 79 extern void soclib_bdv_init( chdev_t * chdev ); 80 81 /******************************************************************************************** 82 * This function is called by the server thread associated to the IOC device. 83 * It decode the IOC device command embedded in the calling thread descriptor, 84 * (format defined in the dev_ioc.h file) and starts execution of this generic command, 85 * accessing the relevant SOCLIB_BDV hardware registers. 86 * Then it blocks on the THREAD_BLOCKED_DEV_ISR and deschedule, because the SOCLIB_BDV 87 * device cannot register several commands. It is re-activated by the ISR signaling the 88 * I/O operation completion. 89 ******************************************************************************************** 90 * @ thread_xp : extended pointer on the client thread. 91 *******************************************************************************************/ 92 extern void soclib_bdv_cmd( xptr_t thread_xp ); 93 94 /******************************************************************************************** 95 * This Interrupt Service Routine is executed when the IRQ signaling the completion of 96 * an IOC command is received by a core. It acknowledge the IRQ by accessing the proper 97 * SOCLIB_BDV register, unblock the client thread, and unblock the server thread that 98 * can starts execution of a new command if the waiting queue is not emppty. 99 ******************************************************************************************** 100 * @ chdev : local pointer on the generic IOC device descriptor. 101 *******************************************************************************************/ 102 extern void soclib_bdv_isr( chdev_t * chdev ); 103 104 105 #endif /* _BLOCK_H_ */ 30 #endif /* _IOC_ATA_ */
Note: See TracChangeset
for help on using the changeset viewer.