Rev 1 | 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 |