Subversion Repositories NaviCtrl

Rev

Rev 1 | Rev 308 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
196 killagreg 1
/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
1 ingob 2
* File Name          : usb_mem.c
3
* Author             : MCD Application Team
196 killagreg 4
* Version            : V4.0.0
5
* Date               : 09/29/2008
6
* Description        : Utility functions for memory transfers to/from PMA.
1 ingob 7
********************************************************************************
196 killagreg 8
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
1 ingob 9
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
10
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
11
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
12
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
13
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
14
*******************************************************************************/
15
 
16
/* Includes ------------------------------------------------------------------*/
17
#include "usb_lib.h"
18
#include "usb_mem.h"
19
#include "usb_conf.h"
20
/* Private typedef -----------------------------------------------------------*/
21
/* Private define ------------------------------------------------------------*/
22
/* Private macro -------------------------------------------------------------*/
23
/* Private variables ---------------------------------------------------------*/
24
/* Private function prototypes -----------------------------------------------*/
25
/* Private functions ---------------------------------------------------------*/
26
 
27
/*******************************************************************************
28
* Function Name  : UserToPMABufferCopy
29
* Description    : Copy a buffer from user memory area to packet memory area (PMA)
196 killagreg 30
* Input          : - pbUsrBuf: pointer to user memory area.
31
*                  - wPMABufAddr: address into PMA.
32
*                  - wNBytes: no. of bytes to be copied.
33
* Output         : None.
34
* Return         : None .
1 ingob 35
*******************************************************************************/
196 killagreg 36
void UserToPMABufferCopy(u8 *pbUsrBuf, u16 wPMABufAddr, u16 wNBytes)
1 ingob 37
{
196 killagreg 38
#ifdef STR7xx                   /* STR7xx family    */
39
  u32 n = (wNBytes + 1) >> 1;   /* n=(wNBytes+1)/2  */
40
  u32 i, temp1, temp2;
1 ingob 41
  u16 *pdwVal;
196 killagreg 42
  pdwVal = (u16 *)(wPMABufAddr * 2 + PMAAddr);
43
 
44
  for (i = n; i != 0; i--)
1 ingob 45
  {
196 killagreg 46
    temp1 = (u16) * pbUsrBuf;
47
    pbUsrBuf++;
48
    temp2 = temp1 | (u16) * pbUsrBuf << 8;
49
    *pdwVal++ = temp2;
50
    pdwVal++;
51
    pbUsrBuf++;
1 ingob 52
  }
196 killagreg 53
#endif                  /* End of STR7xx family*/
1 ingob 54
 
196 killagreg 55
#ifdef STR91x           /*STR91x family*/
56
 
57
  u32 n = (wNBytes + 3) >> 2;  /*n=(wNBytes+1)/4*/
58
  u32 i, temp1, temp2, temp3, temp4;
59
  u32 *pdwVal;
60
  pdwVal = (u32 *)(PMAAddr + (u32)((wPMABufAddr)));
61
  for (i = n; i != 0; i--)
62
  {
63
    temp1 = (u32) * pbUsrBuf;
64
    temp2 = temp1 | (u32) * (pbUsrBuf + 1) << 8;
65
    temp3 = temp2 | (u32) * (pbUsrBuf + 2) << 16;
66
    temp4 = temp3 | (u32) * (pbUsrBuf + 3) << 24;
67
    pbUsrBuf += 4;
68
    *pdwVal = temp4;
69
 
70
    pdwVal++;
71
  }
72
#endif /* End of STR91x family*/
1 ingob 73
}
74
/*******************************************************************************
75
* Function Name  : PMAToUserBufferCopy
76
* Description    : Copy a buffer from user memory area to packet memory area (PMA)
196 killagreg 77
* Input          : - pbUsrBuf    = pointer to user memory area.
78
*                  - wPMABufAddr = address into PMA.
79
*                  - wNBytes     = no. of bytes to be copied.
80
* Output         : None.
81
* Return         : None.
1 ingob 82
*******************************************************************************/
196 killagreg 83
void PMAToUserBufferCopy(u8 *pbUsrBuf, u16 wPMABufAddr, u16 wNBytes)
1 ingob 84
{
196 killagreg 85
#ifdef STR7xx /*STR7xx family*/
86
  u32 n = (wNBytes + 1) >> 1;/* /2*/
87
  u32 i;
88
  u32 *pdwVal;
89
  pdwVal = (u32 *)(wPMABufAddr * 2 + PMAAddr);
90
  for (i = n; i != 0; i--)
91
  {
92
    *pbUsrBuf++ = *(u8*)pdwVal;
93
    *pbUsrBuf++ = *((u8*)pdwVal + 1);
94
    pdwVal ++;  
95
  }
96
 
97
#endif /* End of STR7xx family*/
98
 
99
#ifdef STR91x  /*STR91x family*/
100
  u8 *pbVal;
101
  u16 wNTrasf = wNBytes;
102
  if ((wNBytes) == 0)
103
  {
104
    return;
105
  }
106
  pbVal = (u8 *)(PMAAddr + wPMABufAddr);
107
  while (1)
108
  {
109
    *pbUsrBuf++ = *pbVal++;
110
    if ((--wNTrasf) == 0)
1 ingob 111
    {
196 killagreg 112
      return;
1 ingob 113
    }
196 killagreg 114
    *pbUsrBuf++ = *pbVal++;
115
    if ((--wNTrasf) == 0)
1 ingob 116
    {
196 killagreg 117
      return;
118
    }
119
  }
120
#endif /* End of STR91x family*/
1 ingob 121
}
196 killagreg 122
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
1 ingob 123