ctrl_access.c File Reference

#include "config.h"
#include "ctrl_access.h"
#include "modules/file_system/fat.h"

Include dependency graph for ctrl_access.c:

Go to the source code of this file.

Defines

#define LUN_0_EN   1
 Computed the maximum of static lun (don't add the lun of Mass Storage in mode USB Host).
#define LUN_1_EN   1
#define LUN_2_EN   1
#define LUN_3_EN   1
#define LUN_4_EN   1
#define LUN_5_EN   1
#define LUN_6_EN   1
#define LUN_7_EN   1
#define LUN_USB_EN   1
#define LUN_ID_0   (0)
#define LUN_ID_1   (LUN_0_EN)
#define LUN_ID_2   (LUN_0_EN+LUN_1_EN)
#define LUN_ID_3   (LUN_0_EN+LUN_1_EN+LUN_2_EN)
#define LUN_ID_4   (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN)
#define LUN_ID_5   (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN)
#define LUN_ID_6   (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN+LUN_5_EN)
#define LUN_ID_7   (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN+LUN_5_EN+LUN_6_EN)
#define MAX_LUN   (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN+LUN_5_EN+LUN_6_EN+LUN_7_EN)
#define LUN_ID_USB   (MAX_LUN)

Functions

U8 get_nb_lun ()
 This function return the number of logical unit.
U8 get_cur_lun ()
 This function return the current logical unit.
Ctrl_status mem_test_unit_ready (U8 lun)
 This function test the state of memory, and start the initialisation of the memory.
Ctrl_status mem_read_capacity (U8 lun, U32 _MEM_TYPE_SLOW_ *u32_last_sector)
 This function return the capacity of the memory.
U8 mem_sector_size (U8 lun)
 This function return the sector size of the memory.
Bool mem_wr_protect (U8 lun)
 This function return is the write protected mode.
Bool mem_removal (U8 lun)
 This function inform about the memory type.
U8 code * mem_name (U8 lun)
 This function returns a pointer to the LUN name.
Ctrl_status memory_2_usb (U8 lun, U32 addr, U16 nb_sector)
 This function tranfer a data from memory to usb.
Ctrl_status usb_2_memory (U8 lun, U32 addr, U16 nb_sector)
 This function transfer a data from usb to memory.
Ctrl_status memory_2_ram (U8 lun, const U32 _MEM_TYPE_SLOW_ addr, U8 _MEM_TYPE_SLOW_ *ram)
 Interface for RAM.
Ctrl_status ram_2_memory (U8 lun, const U32 _MEM_TYPE_SLOW_ addr, U8 _MEM_TYPE_SLOW_ *ram)
 This function transfer a data from ram to memory.
U8 stream_mem_to_mem (U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_addr, U16 nb_sector)
 This function copy a data from memory to other memory.
Ctrl_status stream_state (U8 Id)
 Returns the state on a data transfer.
U16 stream_stop (U8 Id)
 Stop the data transfer.

Variables

U8 code lun0_name [] = "VIRTUAL_MEM_ON_CHIP"
U8 code lun1_name [] = "\"NAND Flash\""
U8 code lun2_name [] = "\"On board data flash\""
U8 code lun3_name [] = "\"MMC\""
U8 code lun4_name [] = LUN_4_NAME
U8 code lun5_name [] = LUN_5_NAME
U8 code lun6_name [] = LUN_6_NAME
U8 code lun7_name [] = LUN_7_NAME
U8 code lunusb_name [] = "\"USB Remote memory\""


Detailed Description

This file contains the interface :

Author:
Atmel Corporation: http://www.atmel.com
Support and FAQ: http://support.atmel.no/

Definition in file ctrl_access.c.


Define Documentation

#define LUN_0_EN   1

Computed the maximum of static lun (don't add the lun of Mass Storage in mode USB Host).

Definition at line 92 of file ctrl_access.c.

#define LUN_1_EN   1

Definition at line 98 of file ctrl_access.c.

#define LUN_2_EN   1

Definition at line 104 of file ctrl_access.c.

#define LUN_3_EN   1

Definition at line 110 of file ctrl_access.c.

#define LUN_4_EN   1

Definition at line 116 of file ctrl_access.c.

#define LUN_5_EN   1

Definition at line 122 of file ctrl_access.c.

#define LUN_6_EN   1

Definition at line 128 of file ctrl_access.c.

#define LUN_7_EN   1

Definition at line 134 of file ctrl_access.c.

#define LUN_USB_EN   1

Definition at line 140 of file ctrl_access.c.

#define LUN_ID_0   (0)

Definition at line 147 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_1   (LUN_0_EN)

Definition at line 148 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_2   (LUN_0_EN+LUN_1_EN)

Definition at line 149 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_3   (LUN_0_EN+LUN_1_EN+LUN_2_EN)

Definition at line 150 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_4   (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN)

Definition at line 151 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_5   (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN)

Definition at line 152 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_6   (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN+LUN_5_EN)

Definition at line 153 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_7   (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN+LUN_5_EN+LUN_6_EN)

Definition at line 154 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define MAX_LUN   (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN+LUN_5_EN+LUN_6_EN+LUN_7_EN)

Definition at line 155 of file ctrl_access.c.

Referenced by get_nb_lun().

#define LUN_ID_USB   (MAX_LUN)

Definition at line 156 of file ctrl_access.c.

Referenced by mem_read_capacity(), mem_sector_size(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), and ram_2_memory().


Function Documentation

U8 get_nb_lun (  ) 

This function return the number of logical unit.

Returns:
U8 number of logical unit in the system

Definition at line 172 of file ctrl_access.c.

Referenced by usb_user_read_request().

00173 {
00174 #if   (LUN_USB == ENABLED)
00175    host_ms_max_lun=0;
00176    for(dms_selected=0;dms_selected<dms_connected;dms_selected++)
00177    {
00178       host_ms_max_lun += Host_getlun();
00179    }
00180    return   (MAX_LUN + host_ms_max_lun);
00181 #else
00182    return   MAX_LUN;
00183 #endif
00184 }

Here is the caller graph for this function:

U8 get_cur_lun (  ) 

This function return the current logical unit.

Returns:
U8 number of logical unit in the system

Definition at line 191 of file ctrl_access.c.

Referenced by usb_mass_storage_cbw().

00192 {
00193    return   0; //TODO a specific management
00194 }

Here is the caller graph for this function:

Ctrl_status mem_test_unit_ready ( U8  lun  ) 

This function test the state of memory, and start the initialisation of the memory.

MORE (see SPC-3 §5.2.4) : The TEST UNIT READY command allows an application client to poll a logical unit until it is ready without the need to allocate space for returned data. The TEST UNIT READY command may be used to check the media status of logical units with removable media.

Parameters:
lun Logical unit number
Returns:
Ctrl_status It is ready -> CTRL_GOOD Memory unplug -> CTRL_NO_PRESENT Not initialize -> CTRL_BUSY

Definition at line 210 of file ctrl_access.c.

Referenced by sbc_test_unit_ready().

00211 {
00212    switch( lun )
00213    {
00214 #     if (LUN_0 == ENABLE)
00215       case LUN_ID_0:
00216       return Lun_0_test_unit_ready();
00217       break;
00218 #     endif
00219 #     if (LUN_1 == ENABLE)
00220       case LUN_ID_1:
00221       return Lun_1_test_unit_ready();
00222       break;
00223 #     endif
00224 #     if (LUN_2 == ENABLE)
00225       case LUN_ID_2:
00226       return Lun_2_test_unit_ready();
00227       break;
00228 #     endif
00229 #     if (LUN_3 == ENABLE)
00230       case LUN_ID_3:
00231       return Lun_3_test_unit_ready();
00232       break;
00233 #     endif
00234 #     if (LUN_4 == ENABLE)
00235       case LUN_ID_4:
00236       return Lun_4_test_unit_ready();
00237       break;
00238 #     endif
00239 #     if (LUN_5 == ENABLE)
00240       case LUN_ID_5:
00241       return Lun_5_test_unit_ready();
00242       break;
00243 #     endif
00244 #     if (LUN_6 == ENABLE)
00245       case LUN_ID_6:
00246       return Lun_6_test_unit_ready();
00247       break;
00248 #     endif
00249 #     if (LUN_7 == ENABLE)
00250       case LUN_ID_7:
00251       return Lun_7_test_unit_ready();
00252       break;
00253 #     endif
00254 #     if (LUN_USB == ENABLE)
00255       default:
00256       return Lun_usb_test_unit_ready(lun - LUN_ID_USB);
00257       break;
00258 #     endif
00259    }
00260    return   CTRL_FAIL;
00261 }

Here is the caller graph for this function:

Ctrl_status mem_read_capacity ( U8  lun,
U32 _MEM_TYPE_SLOW_ *  u32_last_sector 
)

This function return the capacity of the memory.

Parameters:
lun Logical unit number
Returns:
*u32_last_sector the last address sector

Ctrl_status It is ready -> CTRL_GOOD Memory unplug -> CTRL_NO_PRESENT

Definition at line 273 of file ctrl_access.c.

Referenced by sbc_read_capacity().

00274 {
00275    switch( lun )
00276    {
00277 #     if (LUN_0 == ENABLE)
00278       case LUN_ID_0:
00279       return Lun_0_read_capacity( u32_last_sector );
00280       break;
00281 #     endif
00282 #     if (LUN_1 == ENABLE)
00283       case LUN_ID_1:
00284       return Lun_1_read_capacity( u32_last_sector );
00285       break;
00286 #     endif
00287 #     if (LUN_2 == ENABLE)
00288       case LUN_ID_2:
00289       return Lun_2_read_capacity( u32_last_sector );
00290       break;
00291 #     endif
00292 #     if (LUN_3 == ENABLE)
00293       case LUN_ID_3:
00294       return Lun_3_read_capacity( u32_last_sector );
00295       break;
00296 #     endif
00297 #     if (LUN_4 == ENABLE)
00298       case LUN_ID_4:
00299       return Lun_4_read_capacity( u32_last_sector );
00300       break;
00301 #     endif
00302 #     if (LUN_5 == ENABLE)
00303       case LUN_ID_5:
00304       return Lun_5_read_capacity( u32_last_sector );
00305       break;
00306 #     endif
00307 #     if (LUN_6 == ENABLE)
00308       case LUN_ID_6:
00309       return Lun_6_read_capacity( u32_last_sector );
00310       break;
00311 #     endif
00312 #     if (LUN_7 == ENABLE)
00313       case LUN_ID_7:
00314       return Lun_7_read_capacity( u32_last_sector );
00315       break;
00316 #     endif
00317 #     if (LUN_USB == ENABLE)
00318       default:
00319       return Lun_usb_read_capacity( lun - LUN_ID_USB, u32_last_sector );
00320       break;
00321 #     endif
00322    }
00323    return   CTRL_FAIL;
00324 }

Here is the caller graph for this function:

U8 mem_sector_size ( U8  lun  ) 

This function return the sector size of the memory.

Parameters:
lun Logical unit number
Returns:
size of sector (unit 512B)

Definition at line 333 of file ctrl_access.c.

00334 {
00335 # if (LUN_USB == ENABLE)
00336   return (lun < LUN_ID_USB) ? 1 : 1; // TODO , add new USB mass-storage driver to manage specific disk capacity
00337 #else
00338   return 1;
00339 #endif
00340 }

Bool mem_wr_protect ( U8  lun  ) 

This function return is the write protected mode.

Parameters:
lun Logical unit number
Only used by memory removal with a HARDWARE SPECIFIC write protected detection !!! The customer must be unplug the card for change this write protected mode.

Returns:
TRUE -> the memory is protected

Definition at line 352 of file ctrl_access.c.

Referenced by sbc_header_mode_sense(), and sbc_write_10().

00353 {
00354    switch( lun )
00355    {
00356 #     if (LUN_0 == ENABLE)
00357       case LUN_ID_0:
00358       return Lun_0_wr_protect();
00359       break;
00360 #     endif
00361 #     if (LUN_1 == ENABLE)
00362       case LUN_ID_1:
00363       return Lun_1_wr_protect();
00364       break;
00365 #     endif
00366 #     if (LUN_2 == ENABLE)
00367       case LUN_ID_2:
00368       return Lun_2_wr_protect();
00369       break;
00370 #     endif
00371 #     if (LUN_3 == ENABLE)
00372       case LUN_ID_3:
00373       return Lun_3_wr_protect();
00374       break;
00375 #     endif
00376 #     if (LUN_4 == ENABLE)
00377       case LUN_ID_4:
00378       return Lun_4_wr_protect();
00379       break;
00380 #     endif
00381 #     if (LUN_5 == ENABLE)
00382       case LUN_ID_5:
00383       return Lun_5_wr_protect();
00384       break;
00385 #     endif
00386 #     if (LUN_6 == ENABLE)
00387       case LUN_ID_6:
00388       return Lun_6_wr_protect();
00389       break;
00390 #     endif
00391 #     if (LUN_7 == ENABLE)
00392       case LUN_ID_7:
00393       return Lun_7_wr_protect();
00394       break;
00395 #     endif
00396 #     if (LUN_USB == ENABLE)
00397       default:
00398       return Lun_usb_wr_protect(lun - LUN_ID_USB);
00399       break;
00400 #     endif
00401    }
00402    return   CTRL_FAIL;
00403 }

Here is the caller graph for this function:

Bool mem_removal ( U8  lun  ) 

This function inform about the memory type.

Parameters:
lun Logical unit number
Returns:
TRUE -> The memory is removal

Definition at line 412 of file ctrl_access.c.

00413 {
00414    switch( lun )
00415    {
00416 #     if (LUN_0 == ENABLE)
00417       case LUN_ID_0:
00418       return Lun_0_removal();
00419       break;
00420 #     endif
00421 #     if (LUN_1 == ENABLE)
00422       case LUN_ID_1:
00423       return Lun_1_removal();
00424       break;
00425 #     endif
00426 #     if (LUN_2 == ENABLE)
00427       case LUN_ID_2:
00428       return Lun_2_removal();
00429       break;
00430 #     endif
00431 #     if (LUN_3 == ENABLE)
00432       case LUN_ID_3:
00433       return Lun_3_removal();
00434       break;
00435 #     endif
00436 #     if (LUN_4 == ENABLE)
00437       case LUN_ID_4:
00438       return Lun_4_removal();
00439       break;
00440 #     endif
00441 #     if (LUN_5 == ENABLE)
00442       case LUN_ID_5:
00443       return Lun_5_removal();
00444       break;
00445 #     endif
00446 #     if (LUN_6 == ENABLE)
00447       case LUN_ID_6:
00448       return Lun_6_removal();
00449       break;
00450 #     endif
00451 #     if (LUN_7 == ENABLE)
00452       case LUN_ID_7:
00453       return Lun_7_removal();
00454       break;
00455 #     endif
00456 #     if (LUN_USB == ENABLE)
00457       default:
00458       return Lun_usb_removal();
00459       break;
00460 #     endif
00461    }
00462    return   CTRL_FAIL;
00463 }

U8 code* mem_name ( U8  lun  ) 

This function returns a pointer to the LUN name.

Parameters:
lun Logical unit number
Returns:
pointer to code string

Definition at line 475 of file ctrl_access.c.

00477 {
00478    switch( lun )
00479    {
00480 #     if (LUN_0 == ENABLE)
00481       case LUN_ID_0:
00482       return (U8 code*)lun0_name;
00483       break;
00484 #     endif
00485 #     if (LUN_1 == ENABLE)
00486       case LUN_ID_1:
00487       return (U8 code*)lun1_name;
00488       break;
00489 #     endif
00490 #     if (LUN_2 == ENABLE)
00491       case LUN_ID_2:
00492       return (U8 code*)lun2_name;
00493       break;
00494 #     endif
00495 #     if (LUN_3 == ENABLE)
00496       case LUN_ID_3:
00497       return (U8 code*)lun3_name;
00498       break;
00499 #     endif
00500 #     if (LUN_4 == ENABLE)
00501       case LUN_ID_4:
00502       return (U8 code*)lun4_name;
00503       break;
00504 #     endif
00505 #     if (LUN_5 == ENABLE)
00506       case LUN_ID_5:
00507       return (U8 code*)lun5_name;
00508       break;
00509 #     endif
00510 #     if (LUN_6 == ENABLE)
00511       case LUN_ID_6:
00512       return (U8 code*)lun6_name;
00513       break;
00514 #     endif
00515 #     if (LUN_7 == ENABLE)
00516       case LUN_ID_7:
00517       return (U8 code*)lun7_name;
00518       break;
00519 #     endif
00520 #     if (LUN_USB == ENABLE)
00521       default:
00522       return (U8 code*)lunusb_name;
00523       break;
00524 #     endif
00525    }
00526    return 0;   // Remove compiler warning
00527 }

Ctrl_status memory_2_usb ( U8  lun,
U32  addr,
U16  nb_sector 
)

This function tranfer a data from memory to usb.

Parameters:
lun Logical unit number
addr Sector address to start read (sector = 512B)
nb_sector Number of sectors to transfer
Returns:
Ctrl_status It is ready -> CTRL_GOOD A error occur -> CTRL_FAIL Memory unplug -> CTRL_NO_PRESENT

Definition at line 547 of file ctrl_access.c.

Referenced by sbc_read_10().

00548 {
00549    Ctrl_status status=CTRL_FAIL;
00550 
00551    switch( lun )
00552    {
00553 #     if (LUN_0 == ENABLE)
00554       case LUN_ID_0:
00555       status = Lun_0_read_10(addr , nb_sector);
00556       break;
00557 #     endif
00558 #     if (LUN_1 == ENABLE)
00559       case LUN_ID_1:
00560       status = Lun_1_read_10(addr , nb_sector);
00561       break;
00562 #     endif
00563 #     if (LUN_2 == ENABLE)
00564       case LUN_ID_2:
00565       status = Lun_2_read_10(addr , nb_sector);
00566       break;
00567 #     endif
00568 #     if (LUN_3 == ENABLE)
00569       case LUN_ID_3:
00570       status = Lun_3_read_10(addr , nb_sector);
00571       break;
00572 #     endif
00573 #     if (LUN_4 == ENABLE)
00574       case LUN_ID_4:
00575       status = Lun_4_read_10(addr , nb_sector);
00576       break;
00577 #     endif
00578 #     if (LUN_5 == ENABLE)
00579       case LUN_ID_5:
00580       status = Lun_5_read_10(addr , nb_sector);
00581       break;
00582 #     endif
00583 #     if (LUN_6 == ENABLE)
00584       case LUN_ID_6:
00585       status = Lun_6_read_10(addr , nb_sector);
00586       break;
00587 #     endif
00588 #     if (LUN_7 == ENABLE)
00589       case LUN_ID_7:
00590       status = Lun_7_read_10(addr , nb_sector);
00591       break;
00592 #     endif
00593    }
00594    return   status;
00595 }

Here is the caller graph for this function:

Ctrl_status usb_2_memory ( U8  lun,
U32  addr,
U16  nb_sector 
)

This function transfer a data from usb to memory.

Parameters:
lun Logical unit number
addr Sector address to start write (sector = 512B)
nb_sector Number of sectors to transfer
Returns:
Ctrl_status It is ready -> CTRL_GOOD A error occur -> CTRL_FAIL Memory unplug -> CTRL_NO_PRESENT

Definition at line 608 of file ctrl_access.c.

Referenced by sbc_write_10().

00609 {
00610    Ctrl_status status=CTRL_FAIL;
00611 
00612    switch( lun )
00613    {
00614 #     if (LUN_0 == ENABLE)
00615       case LUN_ID_0:
00616       status = Lun_0_write_10(addr , nb_sector);
00617       break;
00618 #     endif
00619 #     if (LUN_1 == ENABLE)
00620       case LUN_ID_1:
00621       status = Lun_1_write_10(addr , nb_sector);
00622       break;
00623 #     endif
00624 #     if (LUN_2 == ENABLE)
00625       case LUN_ID_2:
00626       status = Lun_2_write_10(addr , nb_sector);
00627       break;
00628 #     endif
00629 #     if (LUN_3 == ENABLE)
00630       case LUN_ID_3:
00631       status = Lun_3_write_10(addr , nb_sector);
00632       break;
00633 #     endif
00634 #     if (LUN_4 == ENABLE)
00635       case LUN_ID_4:
00636       status = Lun_4_write_10(addr , nb_sector);
00637       break;
00638 #     endif
00639 #     if (LUN_5 == ENABLE)
00640       case LUN_ID_5:
00641       status = Lun_5_write_10(addr , nb_sector);
00642       break;
00643 #     endif
00644 #     if (LUN_6 == ENABLE)
00645       case LUN_ID_6:
00646       status = Lun_6_write_10(addr , nb_sector);
00647       break;
00648 #     endif
00649 #     if (LUN_7 == ENABLE)
00650       case LUN_ID_7:
00651       status = Lun_7_write_10(addr , nb_sector);
00652       break;
00653 #     endif
00654    }
00655    return   status;
00656 }

Here is the caller graph for this function:

Ctrl_status memory_2_ram ( U8  lun,
const U32 _MEM_TYPE_SLOW_  addr,
U8 _MEM_TYPE_SLOW_ *  ram 
)

Interface for RAM.

This function tranfer one sector data from memory to ram

Parameters:
lun Logical unit number
addr Sector address to start read (sector = 512B)
nb_sector Number of sectors to transfer
ram Adresse of ram buffer (only xdata)
Returns:
Ctrl_status It is ready -> CTRL_GOOD A error occur -> CTRL_FAIL Memory unplug -> CTRL_NO_PRESENT

Definition at line 673 of file ctrl_access.c.

Referenced by stream_mem_to_mem().

00674 {
00675 
00676    Ctrl_status status=CTRL_FAIL;
00677 
00678    switch( lun )
00679    {
00680 #     if (LUN_0 == ENABLE)
00681       case LUN_ID_0:
00682       status = Lun_0_mem_2_ram(addr , ram);
00683       break;
00684 #     endif
00685 #     if (LUN_1 == ENABLE)
00686       case LUN_ID_1:
00687       status = Lun_1_mem_2_ram(addr , ram);
00688       break;
00689 #     endif
00690 #     if (LUN_2 == ENABLE)
00691       case LUN_ID_2:
00692       status = Lun_2_mem_2_ram(addr , ram);
00693       break;
00694 #     endif
00695 #     if (LUN_3 == ENABLE)
00696       case LUN_ID_3:
00697       status = Lun_3_mem_2_ram(addr , ram);
00698       break;
00699 #     endif
00700 #     if (LUN_4 == ENABLE)
00701       case LUN_ID_4:
00702       status = Lun_4_mem_2_ram(addr , ram);
00703       break;
00704 #     endif
00705 #     if (LUN_5 == ENABLE)
00706       case LUN_ID_5:
00707       status = Lun_5_mem_2_ram(addr , ram);
00708       break;
00709 #     endif
00710 #     if (LUN_6 == ENABLE)
00711       case LUN_ID_6:
00712       status = Lun_6_mem_2_ram(addr , ram);
00713       break;
00714 #     endif
00715 #     if (LUN_7 == ENABLE)
00716       case LUN_ID_7:
00717       status = Lun_7_mem_2_ram(addr , ram);
00718       break;
00719 #     endif
00720 #     if (LUN_USB == ENABLE)
00721       default:
00722       return  Lun_usb_mem_2_ram(lun - LUN_ID_USB,addr , ram);
00723 #     endif
00724    }
00725    return   status;
00726 }

Here is the caller graph for this function:

Ctrl_status ram_2_memory ( U8  lun,
const U32 _MEM_TYPE_SLOW_  addr,
U8 _MEM_TYPE_SLOW_ *  ram 
)

This function transfer a data from ram to memory.

Parameters:
lun Logical unit number
addr Sector address to start write (sector = 512B)
nb_sector Number of sectors to transfer
ram Adresse of ram buffer (only xdata)
Returns:
Ctrl_status It is ready -> CTRL_GOOD A error occur -> CTRL_FAIL Memory unplug -> CTRL_NO_PRESENT

Definition at line 745 of file ctrl_access.c.

Referenced by stream_mem_to_mem().

00746 {
00747    Ctrl_status status=CTRL_FAIL;
00748 
00749    switch( lun )
00750    {
00751 #     if (LUN_0 == ENABLE)
00752       case LUN_ID_0:
00753       status = Lun_0_ram_2_mem(addr , ram);
00754       break;
00755 #     endif
00756 #     if (LUN_1 == ENABLE)
00757       case LUN_ID_1:
00758       status = Lun_1_ram_2_mem(addr , ram);
00759       break;
00760 #     endif
00761 #     if (LUN_2 == ENABLE)
00762       case LUN_ID_2:
00763       status = Lun_2_ram_2_mem(addr , ram);
00764       break;
00765 #     endif
00766 #     if (LUN_3 == ENABLE)
00767       case LUN_ID_3:
00768       status = Lun_3_ram_2_mem(addr , ram);
00769       break;
00770 #     endif
00771 #     if (LUN_4 == ENABLE)
00772       case LUN_ID_4:
00773       status = Lun_4_ram_2_mem(addr , ram);
00774       break;
00775 #     endif
00776 #     if (LUN_5 == ENABLE)
00777       case LUN_ID_5:
00778       status = Lun_5_ram_2_mem(addr , ram);
00779       break;
00780 #     endif
00781 #     if (LUN_6 == ENABLE)
00782       case LUN_ID_6:
00783       status = Lun_6_ram_2_mem(addr , ram);
00784       break;
00785 #     endif
00786 #     if (LUN_7 == ENABLE)
00787       case LUN_ID_7:
00788       status = Lun_7_ram_2_mem(addr , ram);
00789       break;
00790 #     endif
00791 #     if (LUN_USB == ENABLE)
00792       default:
00793       return  Lun_usb_ram_2_mem(lun - LUN_ID_USB,addr , ram);
00794       break;
00795 #     endif
00796    }
00797    return   status;
00798 }

Here is the caller graph for this function:

U8 stream_mem_to_mem ( U8  src_lun,
U32  src_addr,
U8  dest_lun,
U32  dest_addr,
U16  nb_sector 
)

This function copy a data from memory to other memory.

Parameters:
addr Sector address to start write
nb_sector Number of sectors to transfer

Definition at line 806 of file ctrl_access.c.

00807 {
00808    Ctrl_status status=CTRL_FAIL;
00809    fat_cache_flush();
00810    while(nb_sector)
00811    {
00812       status = memory_2_ram( src_lun , src_addr , fs_g_sector );
00813       if( status != CTRL_GOOD )
00814          break;
00815       status = ram_2_memory( dest_lun , dest_addr , fs_g_sector );
00816       if( status != CTRL_GOOD )
00817          break;
00818       src_addr++;
00819       dest_addr++;
00820       nb_sector--;
00821    }
00822    fat_cache_reset();
00823    return (status != CTRL_GOOD)? ID_STREAM_ERR:0;
00824 }

Ctrl_status stream_state ( U8  Id  ) 

Returns the state on a data transfer.

Parameters:
id transfer id
Returns:
the state of the transfer CTRL_GOOD It is finish CTRL_BUSY It is running CTRL_FAIL It is fail

Definition at line 836 of file ctrl_access.c.

00837 {
00838    return CTRL_GOOD;
00839 }

U16 stream_stop ( U8  Id  ) 

Stop the data transfer.

Parameters:
id Transfer id
Returns:
the number of sector remainder

Definition at line 847 of file ctrl_access.c.

00848 {
00849    return 0;
00850 }


Variable Documentation

U8 code lun0_name[] = "VIRTUAL_MEM_ON_CHIP"

Definition at line 93 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun1_name[] = "\"NAND Flash\""

Definition at line 99 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun2_name[] = "\"On board data flash\""

Definition at line 105 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun3_name[] = "\"MMC\""

Definition at line 111 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun4_name[] = LUN_4_NAME

Definition at line 117 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun5_name[] = LUN_5_NAME

Definition at line 123 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun6_name[] = LUN_6_NAME

Definition at line 129 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun7_name[] = LUN_7_NAME

Definition at line 135 of file ctrl_access.c.

Referenced by mem_name().

U8 code lunusb_name[] = "\"USB Remote memory\""

Definition at line 141 of file ctrl_access.c.

Referenced by mem_name().


Generated on Fri Oct 31 16:13:17 2008 for ATMEL by  doxygen 1.5.3