Changeset 286 for branch/giet_vm_ioc_drivers
- Timestamp:
- Jan 31, 2014, 5:05:21 PM (11 years ago)
- Location:
- branch/giet_vm_ioc_drivers
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branch/giet_vm_ioc_drivers/Makefile
r283 r286 14 14 15 15 ### Objects to be linked for kernel.elf 16 KERNEL_OBJS = build/common/utils.o 17 build/common/vmem.o 16 KERNEL_OBJS = build/common/utils.o \ 17 build/common/vmem.o \ 18 18 build/fat32/fat32.o \ 19 19 build/drivers/dma_driver.o \ … … 23 23 build/drivers/ioc_driver.o \ 24 24 build/drivers/bdv_driver.o \ 25 build/drivers/hba_driver.o \ 25 26 build/drivers/sdc_driver.o \ 26 27 build/drivers/spi_driver.o \ … … 40 41 41 42 ### Objects to be linked for boot.elf 42 BOOT_OBJS = build/common/utils.o 43 build/common/vmem.o 43 BOOT_OBJS = build/common/utils.o \ 44 build/common/vmem.o \ 44 45 build/fat32/fat32.o \ 45 46 build/drivers/tty_driver.o \ … … 49 50 build/drivers/ioc_driver.o \ 50 51 build/drivers/bdv_driver.o \ 52 build/drivers/hba_driver.o \ 51 53 build/drivers/sdc_driver.o \ 52 54 build/drivers/spi_driver.o \ … … 196 198 $(CC) $(GIET_INCLUDE) $(CFLAGS) -c -o $@ $< 197 199 200 build/drivers/hba_driver.o: giet_drivers/hba_driver.c \ 201 giet_drivers/hba_driver.h \ 202 giet_config.h \ 203 $(MAP_XML) 204 $(CC) $(GIET_INCLUDE) $(CFLAGS) -c -o $@ $< 205 198 206 build/drivers/sdc_driver.o: giet_drivers/sdc_driver.c \ 199 207 giet_drivers/sdc_driver.h \ -
branch/giet_vm_ioc_drivers/giet_drivers/hba_driver.c
r283 r286 77 77 #include <ctx_handler.h> 78 78 #include <mmc_driver.h> 79 #include <hba_driver.h> 79 80 #include <vmem.h> 80 81 … … 128 129 if( channel >= NB_HBA_CHANNELS ) 129 130 { 130 _ get_lock(&_tty_put_lock);131 _tty_get_lock( 0 ); 131 132 _puts("\n[GIET ERROR] in _hba_get_status() : illegal channel\n"); 132 _ release_lock(&_tty_put_lock);133 _tty_release_lock( 0 ); 133 134 return 1; 134 135 } … … 150 151 if( channel >= NB_HBA_CHANNELS ) 151 152 { 152 _ get_lock(&_tty_put_lock);153 _tty_get_lock( 0 ); 153 154 _puts("\n[GIET ERROR] in _hba_reset_status() : illegal channel\n"); 154 _ release_lock(&_tty_put_lock);155 _tty_release_lock( 0 ); 155 156 return 1; 156 157 } … … 191 192 hba_cmd_table_t* cmd_table; // command table pointer 192 193 193 // TODO The block size must be obtained from the hardware... 194 block_size = 512; 194 block_size = _hba_get_block_size(); 195 195 196 196 // check buffer alignment 197 197 if( buf_vaddr & (block_size-1) ) 198 198 { 199 _ get_lock(&_tty_put_lock);199 _tty_get_lock( 0 ); 200 200 _puts("\n[GIET ERROR] in _hba_set_cmd() : user buffer not block aligned\n"); 201 _ release_lock(&_tty_put_lock);201 _tty_release_lock( 0 ); 202 202 return 1; 203 203 } … … 207 207 if ( channel_id == 0xFFFFFFFF ) 208 208 { 209 _ get_lock(&_tty_put_lock);209 _tty_get_lock( 0 ); 210 210 _puts("\n[GIET ERROR] in _hba_set_cmd() : no HBA channel allocated\n"); 211 _ release_lock(&_tty_put_lock);211 _tty_release_lock( 0 ); 212 212 return 1; 213 213 } … … 223 223 if( pxci & (1<<cmd_id ) ) 224 224 { 225 _ get_lock(&_tty_put_lock);225 _tty_get_lock( 0 ); 226 226 _puts("\n[GIET ERROR] in _hba_set_cmd() : command list full in channel \n"); 227 227 _putd( channel_id ); 228 228 _puts("\n"); 229 _ release_lock(&_tty_put_lock);229 _tty_release_lock( 0 ); 230 230 return 1; 231 231 } … … 262 262 if ( ko ) 263 263 { 264 _ get_lock(&_tty_put_lock);264 _tty_get_lock( 0 ); 265 265 _puts("[GIET ERROR] in _hba_set_cmd() : user buffer unmapped\n"); 266 _ release_lock(&_tty_put_lock);266 _tty_release_lock( 0 ); 267 267 return 1; 268 268 } 269 269 if ((flags & PTE_U) == 0) 270 270 { 271 _ get_lock(&_tty_put_lock);271 _tty_get_lock( 0 ); 272 272 _puts("[GIET ERROR] in _hba_set_cmd() : user buffer not in user space\n"); 273 _ release_lock(&_tty_put_lock);273 _tty_release_lock( 0 ); 274 274 return 1; 275 275 } 276 276 if (((flags & PTE_W) == 0 ) && (is_read == 0) ) 277 277 { 278 _ get_lock(&_tty_put_lock);278 _tty_get_lock( 0 ); 279 279 _puts("[GIET ERROR] in _hba_set_cmd() : user buffer not writable\n"); 280 _ release_lock(&_tty_put_lock);280 _tty_release_lock( 0 ); 281 281 return 1; 282 282 } … … 285 285 if( buf_id > 245 ) 286 286 { 287 _ get_lock(&_tty_put_lock);287 _tty_get_lock( 0 ); 288 288 _puts("[GIET ERROR] in _hba_set_cmd() : max number of buffers is 248\n"); 289 _ release_lock(&_tty_put_lock);289 _tty_release_lock( 0 ); 290 290 return 1; 291 291 } … … 415 415 // Returns 0 if success, > 0 if error. 416 416 /////////////////////////////////////////////////////////////////// 417 unsigned int _hba_write( unsigned int lba, 417 unsigned int _hba_write( unsigned int mode, 418 unsigned int lba, 418 419 void* buffer, 419 420 unsigned int count ) … … 427 428 // Returns 0 if success, > 0 if error. 428 429 /////////////////////////////////////////////////////////////////// 429 unsigned int _hba_read( unsigned int lba, 430 unsigned int _hba_read( unsigned int mode, 431 unsigned int lba, 430 432 void* buffer, 431 433 unsigned int count ) … … 440 442 // - the command tables physical addresses array, 441 443 ////////////////////////////////////////////////////////////////// 442 void_hba_init( unsigned int channel )444 unsigned int _hba_init( unsigned int channel ) 443 445 { 444 446 unsigned int ppn; … … 473 475 if ( fail ) 474 476 { 475 _ get_lock(&_tty_put_lock);477 _tty_get_lock( 0 ); 476 478 _puts("[GIET ERROR] in _hba_init() : command list unmapped\n"); 477 _ release_lock(&_tty_put_lock);478 _exit();479 _tty_release_lock( 0 ); 480 return 1; 479 481 } 480 482 hba_cmd_list_paddr[channel] = ((paddr_t)ppn) | (vbase & 0xFFF); … … 490 492 if ( fail ) 491 493 { 492 _ get_lock(&_tty_put_lock);494 _tty_get_lock( 0 ); 493 495 _puts("[GIET ERROR] in _hba_init() : command table unmapped\n"); 494 _ release_lock(&_tty_put_lock);495 _exit();496 _tty_release_lock( 0 ); 497 return 1; 496 498 } 497 499 hba_cmd_table_paddr[channel][c] = ((paddr_t)ppn) | (vbase & 0xFFF); 498 500 } 501 502 return 0; 499 503 } 500 504 505 /////////////////////////////////////////////////////////////////////////////// 506 // _hba_get_block_size() 507 // This function returns the block_size of HBA controller 508 /////////////////////////////////////////////////////////////////////////////// 509 unsigned int _hba_get_block_size() 510 { 511 // TODO The block size must be obtained from the hardware... 512 return 512; 513 } 501 514 502 515 -
branch/giet_vm_ioc_drivers/giet_drivers/hba_driver.h
r258 r286 94 94 95 95 /////////////////////////////////////////////////////////////////////////////////// 96 // HBA device access functions (vci_ multi_nic)96 // HBA device access functions (vci_hba) 97 97 /////////////////////////////////////////////////////////////////////////////////// 98 98 99 unsigned int _hba_write( unsigned int lba, // logic bloc address on device 99 unsigned int _hba_write( unsigned int mode, 100 unsigned int lba, // logic bloc address on device 100 101 void* buffer, // memory buffer base address 101 102 unsigned int count ); // number of blocs 102 103 103 unsigned int _hba_read ( unsigned int lba, // logic bloc address on device 104 unsigned int _hba_read ( unsigned int mode, 105 unsigned int lba, // logic bloc address on device 104 106 void* buffer, // memory buffer base address 105 107 unsigned int count ); // number of blocks 106 108 107 void _hba_init();109 unsigned int _hba_init ( unsigned int channel ); 108 110 109 111 unsigned int _hba_get_status( unsigned int channel, … … 111 113 112 114 unsigned int _hba_reset_status( unsigned int channel ); 115 116 unsigned int _hba_get_block_size (); 113 117 114 118 -
branch/giet_vm_ioc_drivers/giet_xml/mapping_info.h
r283 r286 104 104 PERIPH_TYPE_DMA = 1, 105 105 PERIPH_TYPE_FBF = 2, 106 PERIPH_TYPE_HBA = 3, 107 PERIPH_TYPE_ICU = 4, 108 PERIPH_TYPE_IOB = 5, 109 PERIPH_TYPE_IOC = 6, 110 PERIPH_TYPE_MMC = 7, 111 PERIPH_TYPE_MWR = 8, 112 PERIPH_TYPE_NIC = 9, 113 PERIPH_TYPE_ROM = 10, 114 PERIPH_TYPE_SIM = 11, 115 PERIPH_TYPE_TIM = 12, 116 PERIPH_TYPE_TTY = 13, 117 PERIPH_TYPE_XCU = 14, 118 119 PERIPH_TYPE_MAX_VALUE = 15, 106 PERIPH_TYPE_ICU = 3, 107 PERIPH_TYPE_IOB = 4, 108 PERIPH_TYPE_IOC = 5, 109 PERIPH_TYPE_MMC = 6, 110 PERIPH_TYPE_MWR = 7, 111 PERIPH_TYPE_NIC = 8, 112 PERIPH_TYPE_ROM = 9, 113 PERIPH_TYPE_SIM = 10, 114 PERIPH_TYPE_TIM = 11, 115 PERIPH_TYPE_TTY = 12, 116 PERIPH_TYPE_XCU = 13, 117 118 PERIPH_TYPE_MAX_VALUE = 14, 120 119 }; 121 120 … … 153 152 unsigned int fbf_cluster; // index of cluster containing FBF controler 154 153 unsigned int fbf_cluster_bis; // index of cluster containing second FBF controler 155 156 unsigned int hba_cluster; // index of cluster containing HBA controler157 unsigned int hba_cluster_bis; // index of cluster containing second HBA controler158 154 159 155 unsigned int iob_cluster; // index of cluster containing IOB controler -
branch/giet_vm_ioc_drivers/giet_xml/xml_driver.c
r283 r286 62 62 "DMA", 63 63 "FBF", 64 "HBA",65 64 "ICU", 66 65 "IOB", -
branch/giet_vm_ioc_drivers/giet_xml/xml_parser.c
r283 r286 1302 1302 } 1303 1303 ///////////////////////////////// 1304 else if (strcmp(str, "HBA") == 0)1305 {1306 periph[periph_index]->type = PERIPH_TYPE_HBA;1307 use_hba = 1;1308 if (header->hba_cluster == 0xFFFFFFFF)1309 {1310 header->hba_cluster = cluster_index;1311 hba_channels = periph[periph_index]->channels;1312 }1313 else if (header->hba_cluster_bis == 0xFFFFFFFF)1314 {1315 header->hba_cluster_bis = cluster_index;1316 assert( (hba_channels == periph[periph_index]->channels) &&1317 "[XML ERROR] unconsistent non replicated peripheral");1318 }1319 else1320 {1321 error = 1;1322 }1323 }1324 /////////////////////////////////1325 1304 else if (strcmp(str, "IOB") == 0) 1326 1305 { … … 2353 2332 header->fbf_cluster = 0xFFFFFFFF; 2354 2333 header->fbf_cluster_bis = 0xFFFFFFFF; 2355 2356 header->hba_cluster = 0xFFFFFFFF;2357 header->hba_cluster_bis = 0xFFFFFFFF;2358 2334 2359 2335 header->iob_cluster = 0xFFFFFFFF; … … 2750 2726 ld_write(fdout, "seg_cma_base ", periph_vbase_array[PERIPH_TYPE_CMA]); 2751 2727 ld_write(fdout, "seg_fbf_base ", periph_vbase_array[PERIPH_TYPE_FBF]); 2752 ld_write(fdout, "seg_hba_base ", periph_vbase_array[PERIPH_TYPE_HBA]);2753 2728 ld_write(fdout, "seg_iob_base ", periph_vbase_array[PERIPH_TYPE_IOB]); 2754 2729 ld_write(fdout, "seg_ioc_base ", periph_vbase_array[PERIPH_TYPE_IOC]);
Note: See TracChangeset
for help on using the changeset viewer.