This file manages the virtual memory.
Definition in file virtual_mem.h.
#include "conf_access.h"
#include "ctrl_access.h"
Go to the source code of this file.
Defines | |
#define | ENTRY_SIZE 32 |
FAT specification. | |
#define | FAT_SECTOR (PBR_SECTOR + VMEM_RESERVED_SIZE) |
#define | FILE_SECTOR (ROOT_SECTOR + VMEM_NB_ROOT_ENTRY * ENTRY_SIZE / VMEM_SECTOR_SIZE) |
#define | FILE_SIZE 16 |
#define | PBR_SECTOR 0 |
#define | ROOT_SECTOR (FAT_SECTOR + VMEM_NB_FATS * VMEM_SIZE_FAT) |
#define | VMEM_CLUSTER_SIZE 1 |
#define | VMEM_MEDIA_TYPE 0xF8 |
#define | VMEM_NB_FATS 2 |
#define | VMEM_NB_HEAD 1 |
#define | VMEM_NB_HIDDEN_SECT 0 |
#define | VMEM_NB_ROOT_ENTRY 16 |
#define | VMEM_NB_SECTOR (FILE_SIZE * VMEM_CLUSTER_SIZE + FILE_SECTOR) |
#define | VMEM_RESERVED_SIZE 1 |
#define | VMEM_SECT_PER_TRACK 1 |
#define | VMEM_SECTOR_SIZE 512 |
Value of virtual PBR. | |
#define | VMEM_SIZE_FAT 1 |
#define | VMEN_DRIVE_NUMBER 0x80 |
Functions | |
Ctrl_status | virtual_mem_2_ram (U32 addr, void *ram) |
This function tranfers 1 data sector from memory to RAM sector = 512 bytes. | |
Ctrl_status | virtual_ram_2_mem (U32 addr, const void *ram) |
This function tranfers 1 data sector from memory to RAM sector = 512 bytes. | |
Ctrl_status | virtual_read_capacity (U32 *u32_nb_sector) |
This function returns the address of the last valid sector. | |
Bool | virtual_removal (void) |
This function informs about the memory type. | |
Ctrl_status | virtual_test_unit_ready (void) |
This function tests memory state, and starts memory initialization. | |
Ctrl_status | virtual_usb_read_10 (U32 addr, U16 nb_sector) |
This function transfers the memory data (programmed in sbc_read_10) directly to the USB interface sector = 512 bytes. | |
Ctrl_status | virtual_usb_write_10 (U32 addr, U16 nb_sector) |
This function transfers the USB data (programmed in sbc_write_10) directly to the memory interface sector = 512 bytes. | |
Bool | virtual_wr_protect (void) |
This function returns the write-protected mode Only used by memory removal with a HARDWARE-SPECIFIC write-protected detection. |
#define ENTRY_SIZE 32 |
#define FAT_SECTOR (PBR_SECTOR + VMEM_RESERVED_SIZE) |
#define FILE_SECTOR (ROOT_SECTOR + VMEM_NB_ROOT_ENTRY * ENTRY_SIZE / VMEM_SECTOR_SIZE) |
Definition at line 88 of file virtual_mem.h.
Referenced by virtual_ram_2_mem(), and virtual_usb_write_10().
#define FILE_SIZE 16 |
Definition at line 90 of file virtual_mem.h.
#define PBR_SECTOR 0 |
#define ROOT_SECTOR (FAT_SECTOR + VMEM_NB_FATS * VMEM_SIZE_FAT) |
Definition at line 87 of file virtual_mem.h.
#define VMEM_CLUSTER_SIZE 1 |
#define VMEM_MEDIA_TYPE 0xF8 |
#define VMEM_NB_FATS 2 |
#define VMEM_NB_HEAD 1 |
#define VMEM_NB_HIDDEN_SECT 0 |
#define VMEM_NB_ROOT_ENTRY 16 |
#define VMEM_NB_SECTOR (FILE_SIZE * VMEM_CLUSTER_SIZE + FILE_SECTOR) |
Definition at line 93 of file virtual_mem.h.
Referenced by virtual_check_init(), virtual_mem_2_ram(), virtual_ram_2_mem(), virtual_read_capacity(), virtual_usb_read_10(), and virtual_usb_write_10().
#define VMEM_RESERVED_SIZE 1 |
#define VMEM_SECT_PER_TRACK 1 |
#define VMEM_SECTOR_SIZE 512 |
Value of virtual PBR.
Definition at line 68 of file virtual_mem.h.
Referenced by virtual_check_init(), virtual_mem_2_ram(), virtual_ram_2_mem(), virtual_usb_read_10(), and virtual_usb_write_10().
#define VMEM_SIZE_FAT 1 |
#define VMEN_DRIVE_NUMBER 0x80 |
Ctrl_status virtual_mem_2_ram | ( | U32 | addr, | |
void * | ram | |||
) |
This function tranfers 1 data sector from memory to RAM sector = 512 bytes.
addr | Sector address to start read | |
ram | Address of RAM buffer |
Definition at line 330 of file virtual_mem.c.
References virtual_check_init(), vmem_data, VMEM_NB_SECTOR, and VMEM_SECTOR_SIZE.
00331 { 00332 virtual_check_init(); 00333 if (addr + 1 > Max(VMEM_NB_SECTOR, 8)) return CTRL_FAIL; 00334 00335 // If overflow (possible with size virtual mem < 8 sectors) then read the last sector 00336 addr = min(addr, VMEM_NB_SECTOR - 1); 00337 00338 memcpy(ram, &vmem_data[addr * VMEM_SECTOR_SIZE], VMEM_SECTOR_SIZE); 00339 00340 return CTRL_GOOD; 00341 }
Ctrl_status virtual_ram_2_mem | ( | U32 | addr, | |
const void * | ram | |||
) |
This function tranfers 1 data sector from memory to RAM sector = 512 bytes.
addr | Sector address to start write | |
ram | Address of RAM buffer |
Definition at line 353 of file virtual_mem.c.
References FILE_SECTOR, s_b_data_modify, virtual_check_init(), vmem_data, VMEM_NB_SECTOR, and VMEM_SECTOR_SIZE.
00354 { 00355 virtual_check_init(); 00356 if (addr + 1 > VMEM_NB_SECTOR) return CTRL_FAIL; 00357 00358 #if VIRTUAL_MEM_TEST_CHANGE_STATE == ENABLED 00359 if (addr + 1 > FILE_SECTOR && addr <= FILE_SECTOR) 00360 s_b_data_modify = TRUE; 00361 #endif 00362 00363 memcpy(&vmem_data[addr * VMEM_SECTOR_SIZE], ram, VMEM_SECTOR_SIZE); 00364 00365 return CTRL_GOOD; 00366 }
Ctrl_status virtual_read_capacity | ( | U32 * | u32_nb_sector | ) |
This function returns the address of the last valid sector.
u32_nb_sector | Pointer to number of sectors (sector = 512 bytes) |
Definition at line 191 of file virtual_mem.c.
References virtual_check_init(), and VMEM_NB_SECTOR.
00192 { 00193 virtual_check_init(); 00194 *u32_nb_sector = Max(VMEM_NB_SECTOR, 8) - 1; 00195 00196 return CTRL_GOOD; 00197 }
Bool virtual_removal | ( | void | ) |
This function informs about the memory type.
Definition at line 212 of file virtual_mem.c.
Ctrl_status virtual_test_unit_ready | ( | void | ) |
This function tests memory state, and starts memory initialization.
Definition at line 176 of file virtual_mem.c.
References virtual_check_init().
00177 { 00178 virtual_check_init(); 00179 00180 return CTRL_GOOD; 00181 }
Ctrl_status virtual_usb_read_10 | ( | U32 | addr, | |
U16 | nb_sector | |||
) |
This function transfers the memory data (programmed in sbc_read_10) directly to the USB interface sector = 512 bytes.
addr | Sector address to start read | |
nb_sector | Number of sectors to transfer |
Definition at line 234 of file virtual_mem.c.
References data_to_transfer, g_scsi_ep_ms_in, virtual_check_init(), vmem_data, VMEM_NB_SECTOR, and VMEM_SECTOR_SIZE.
00235 { 00236 const void *ptr_cram; 00237 U16 data_to_transfer; 00238 00239 virtual_check_init(); 00240 if (addr + nb_sector > Max(VMEM_NB_SECTOR, 8)) return CTRL_FAIL; 00241 00242 while (nb_sector--) 00243 { 00244 // If overflow (possible with size virtual mem < 8 sectors) then read the last sector 00245 addr = min(addr, VMEM_NB_SECTOR - 1); 00246 00247 ptr_cram = &vmem_data[addr++ * VMEM_SECTOR_SIZE]; 00248 data_to_transfer = VMEM_SECTOR_SIZE; 00249 while (data_to_transfer) 00250 { 00251 while (!Is_usb_in_ready(g_scsi_ep_ms_in)) 00252 { 00253 if(!Is_usb_endpoint_enabled(g_scsi_ep_ms_in)) 00254 return CTRL_FAIL; // USB Reset 00255 } 00256 00257 Usb_reset_endpoint_fifo_access(g_scsi_ep_ms_in); 00258 data_to_transfer = usb_write_ep_txpacket(g_scsi_ep_ms_in, ptr_cram, 00259 data_to_transfer, &ptr_cram); 00260 Usb_ack_in_ready_send(g_scsi_ep_ms_in); 00261 } 00262 } 00263 00264 return CTRL_GOOD; 00265 }
Ctrl_status virtual_usb_write_10 | ( | U32 | addr, | |
U16 | nb_sector | |||
) |
This function transfers the USB data (programmed in sbc_write_10) directly to the memory interface sector = 512 bytes.
addr | Sector address to start write | |
nb_sector | Number of sectors to transfer |
Definition at line 277 of file virtual_mem.c.
References data_to_transfer, FILE_SECTOR, g_scsi_ep_ms_out, s_b_data_modify, virtual_check_init(), vmem_data, VMEM_NB_SECTOR, and VMEM_SECTOR_SIZE.
00278 { 00279 void *ptr_cram; 00280 U16 data_to_transfer; 00281 00282 virtual_check_init(); 00283 if (addr + nb_sector > VMEM_NB_SECTOR) return CTRL_FAIL; 00284 00285 #if VIRTUAL_MEM_TEST_CHANGE_STATE == ENABLED 00286 if (addr + nb_sector > FILE_SECTOR && addr <= FILE_SECTOR) 00287 s_b_data_modify = TRUE; 00288 #endif 00289 00290 ptr_cram = &vmem_data[addr * VMEM_SECTOR_SIZE]; 00291 while (nb_sector--) 00292 { 00293 data_to_transfer = VMEM_SECTOR_SIZE; 00294 while (data_to_transfer) 00295 { 00296 while (!Is_usb_out_received(g_scsi_ep_ms_out)) 00297 { 00298 if(!Is_usb_endpoint_enabled(g_scsi_ep_ms_out)) 00299 return CTRL_FAIL; // USB Reset 00300 } 00301 00302 Usb_reset_endpoint_fifo_access(g_scsi_ep_ms_out); 00303 data_to_transfer = usb_read_ep_rxpacket(g_scsi_ep_ms_out, ptr_cram, 00304 data_to_transfer, &ptr_cram); 00305 Usb_ack_out_received_free(g_scsi_ep_ms_out); 00306 } 00307 } 00308 00309 return CTRL_GOOD; 00310 }
Bool virtual_wr_protect | ( | void | ) |
This function returns the write-protected mode Only used by memory removal with a HARDWARE-SPECIFIC write-protected detection.
Definition at line 204 of file virtual_mem.c.