My Project
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules
cfgnor.c
Go to the documentation of this file.
1 #include <stdlib.h>
2 #include <3ds.h>
3 
5 
7 {
8  Result ret = 0;
9  u32 *cmdbuf = getThreadCommandBuffer();
10 
11  ret = srvGetServiceHandle(&CFGNOR_handle, "cfg:nor");
12  if(ret!=0)return ret;
13 
14  cmdbuf[0] = 0x00010040;
15  cmdbuf[1] = (u32)value;
16 
17  if((ret = svcSendSyncRequest(CFGNOR_handle))!=0)return ret;
18 
19  ret = (Result)cmdbuf[1];
20  return ret;
21 }
22 
24 {
25  Result ret = 0;
26  u32 *cmdbuf = getThreadCommandBuffer();
27 
28  cmdbuf[0] = 0x00020000;
29 
30  if((ret = svcSendSyncRequest(CFGNOR_handle))!=0)return ret;
31  ret = (Result)cmdbuf[1];
32 
34  CFGNOR_handle = 0;
35 
36  return ret;
37 }
38 
39 Result CFGNOR_ReadData(u32 offset, u32 *buf, u32 size)
40 {
41  Result ret = 0;
42  u32 *cmdbuf = getThreadCommandBuffer();
43 
44  cmdbuf[0] = 0x00050082;
45  cmdbuf[1] = offset;
46  cmdbuf[2] = size;
47  cmdbuf[3] = (size<<4) | 12;
48  cmdbuf[4] = (u32)buf;
49 
50  if((ret = svcSendSyncRequest(CFGNOR_handle))!=0)return ret;
51 
52  ret = (Result)cmdbuf[1];
53  return ret;
54 }
55 
56 Result CFGNOR_WriteData(u32 offset, u32 *buf, u32 size)
57 {
58  u32 ret = 0;
59  u32 *cmdbuf = getThreadCommandBuffer();
60 
61  cmdbuf[0] = 0x00060082;
62  cmdbuf[1] = offset;
63  cmdbuf[2] = size;
64  cmdbuf[3] = (size<<4) | 10;
65  cmdbuf[4] = (u32)buf;
66 
67  if((ret = svcSendSyncRequest(CFGNOR_handle))!=0)return ret;
68 
69  ret = (Result)cmdbuf[1];
70  return ret;
71 }
72 
74 {
75  Result ret = 0;
76  u32 pos=0;
77  u32 chunksize = 0x100;
78 
79  for(pos=0; pos<size; pos+=chunksize)
80  {
81  if(size-pos < chunksize)chunksize = size-pos;
82 
83  ret = CFGNOR_ReadData(pos, &buf[pos>>2], chunksize);
84  if(ret!=0)break;
85  }
86 
87  return ret;
88 }
89 
91 {
92  Result ret = 0;
93  u32 pos=0;
94  u32 chunksize = 0x100;
95 
96  for(pos=0; pos<size; pos+=chunksize)
97  {
98  if(size-pos < chunksize)chunksize = size-pos;
99 
100  ret = CFGNOR_WriteData(pos, &buf[pos>>2], chunksize);
101  if(ret!=0)break;
102  }
103 
104  return ret;
105 }
106 
Result CFGNOR_Initialize(u8 value)
Definition: cfgnor.c:6
Result CFGNOR_WriteData(u32 offset, u32 *buf, u32 size)
Definition: cfgnor.c:56
s32 Result
Definition: types.h:42
s32 svcCloseHandle(Handle handle)
Result srvGetServiceHandle(Handle *out, const char *name)
Definition: srv.c:109
u32 Handle
Definition: types.h:41
Result CFGNOR_Shutdown()
Definition: cfgnor.c:23
u32 * getThreadCommandBuffer(void)
Result CFGNOR_DumpFlash(u32 *buf, u32 size)
Definition: cfgnor.c:73
uint8_t u8
Definition: types.h:21
uint32_t u32
Definition: types.h:23
Result CFGNOR_WriteFlash(u32 *buf, u32 size)
Definition: cfgnor.c:90
Handle CFGNOR_handle
Definition: cfgnor.c:4
s32 svcSendSyncRequest(Handle session)
Result CFGNOR_ReadData(u32 offset, u32 *buf, u32 size)
Definition: cfgnor.c:39