Root/usbboot/src/mem.c

1#include <stdint.h>
2#include <stdio.h>
3#include "ingenic_usb.h"
4
5#define MEM_WRITE 0
6#define MEM_READ 1
7
8#define MEM_8BIT (0 << 1)
9#define MEM_16BIT (1 << 1)
10#define MEM_32BIT (2 << 1)
11
12static void mem_write(struct ingenic_dev *dev, uint32_t addr, uint32_t val, unsigned int width)
13{
14    char ret[8];
15    usb_send_data_address_to_ingenic(dev, addr);
16    usb_send_data_length_to_ingenic(dev, val);
17    usb_ingenic_mem_ops(dev, MEM_WRITE | width);
18    usb_read_data_from_ingenic(dev, ret, ARRAY_SIZE(ret));
19}
20
21static uint32_t mem_read(struct ingenic_dev *dev, uint32_t addr, unsigned int width)
22{
23    char ret[8];
24    usb_send_data_address_to_ingenic(dev, addr);
25    usb_ingenic_mem_ops(dev, MEM_READ | width);
26    usb_read_data_from_ingenic(dev, ret, ARRAY_SIZE(ret));
27
28    return (((unsigned char)ret[3]) << 24) | (((unsigned char)ret[2]) << 16) |
29            (((unsigned char)ret[1]) << 8) | ((unsigned char)ret[0]);
30}
31
32void mem_write8(struct ingenic_dev *dev, uint32_t addr, uint8_t val)
33{
34    mem_write(dev, addr, val, MEM_8BIT);
35}
36
37void mem_write16(struct ingenic_dev *dev, uint32_t addr, uint16_t val)
38{
39    mem_write(dev, addr, val, MEM_16BIT);
40}
41
42void mem_write32(struct ingenic_dev *dev, uint32_t addr, uint32_t val)
43{
44    mem_write(dev, addr, val, MEM_32BIT);
45}
46
47uint8_t mem_read8(struct ingenic_dev *dev, uint32_t addr)
48{
49    uint8_t val = mem_read(dev, addr, MEM_8BIT) & 0xff;
50    return val;
51}
52
53uint16_t mem_read16(struct ingenic_dev *dev, uint32_t addr)
54{
55    return mem_read(dev, addr, MEM_16BIT) & 0xffff;
56}
57
58uint32_t mem_read32(struct ingenic_dev *dev, uint32_t addr)
59{
60    return mem_read(dev, addr, MEM_32BIT);
61}
62

Archive Download this file



interactive