Lines Matching refs:uevent

38 // buffer size refer to kernel kobject uevent
104 STATIC void HandleUevent(const struct Uevent *uevent)
106 if (uevent->action == ACTION_ADD || uevent->action == ACTION_CHANGE || uevent->action == ACTION_ONLINE) {
107 ChangeSysAttributePermissions(uevent->syspath);
110 SUBSYSTEMTYPE type = GetSubsystemType(uevent->subsystem);
113 HandleBlockDeviceEvent(uevent);
116 HandleFimwareDeviceEvent(uevent);
119 HandleOtherDeviceEvent(uevent);
143 static void HandleRequiredDynamicDeviceNodes(const struct Uevent *uevent)
148 if (uevent->deviceName == NULL) {
153 if (strcmp(uevent->deviceName, DYNAMIC_DEVICES[idx].dev + DEV_NODE_PATH_PREFIX_LEN) != 0) {
158 if (strcmp(uevent->deviceName, "mapper/control") == 0) {
159 HandleOtherDeviceEvent(uevent);
166 makedev((unsigned int)uevent->major, (unsigned int)uevent->minor)) != 0) {
175 static void HandleRequiredBlockDeviceNodes(const struct Uevent *uevent, char **devices, int num)
178 if (uevent->partitionName == NULL) {
179 if (strstr(devices[i], uevent->deviceName) != NULL) {
180 INIT_LOGI("%s match with required partition %s success, now handle it", devices[i], uevent->deviceName);
181 HandleBlockDeviceEvent(uevent);
184 } else if (strstr(devices[i], uevent->partitionName) != NULL ||
185 strstr(uevent->partitionName, "vendor") != NULL ||
186 strstr(uevent->partitionName, "system") != NULL ||
187 strstr(uevent->partitionName, "chipset") != NULL ||
188 strstr(uevent->partitionName, "boot") != NULL ||
189 strstr(uevent->partitionName, "ramdisk") != NULL ||
190 strstr(uevent->partitionName, "rvt") != NULL ||
191 strstr(uevent->partitionName, "dtbo") != NULL) {
192 INIT_LOGI("Handle required partitionName %s", uevent->partitionName);
193 HandleBlockDeviceEvent(uevent);
197 INIT_LOGW("Not found device for partitionName %s ", uevent->partitionName);
200 static void HandleUeventRequired(const struct Uevent *uevent, char **devices, int num)
203 if (uevent->action == ACTION_ADD) {
204 ChangeSysAttributePermissions(uevent->syspath);
206 SUBSYSTEMTYPE type = GetSubsystemType(uevent->subsystem);
208 HandleRequiredBlockDeviceNodes(uevent, devices, num);
210 HandleRequiredDynamicDeviceNodes(uevent);
216 static void AddUevent(struct Uevent *uevent, const char *event, size_t len)
219 uevent->syspath = event + strlen("DEVPATH=");
221 uevent->subsystem = event + strlen("SUBSYSTEM=");
223 uevent->action = GetUeventAction(event + strlen("ACTION="));
225 uevent->deviceName = event + strlen("DEVNAME=");
227 uevent->partitionName = event + strlen("PARTNAME=");
229 uevent->partitionNum = StringToInt(event + strlen("PARTN="), -1);
231 uevent->major = StringToInt(event + strlen("MAJOR="), -1);
233 uevent->minor = StringToInt(event + strlen("MINOR="), -1);
235 uevent->ug.uid = (uid_t)StringToInt(event + strlen("DEVUID="), 0);
237 uevent->ug.gid = (gid_t)StringToInt(event + strlen("DEVGID="), 0);
239 uevent->firmware = event + strlen("FIRMWARE=");
241 uevent->busNum = StringToInt(event + strlen("BUSNUM="), -1);
243 uevent->devNum = StringToInt(event + strlen("DEVNUM="), -1);
247 INIT_LOGV("got uevent message:\n"
255 uevent->subsystem,
256 uevent->partitionName, uevent->partitionNum,
257 uevent->action,
258 uevent->syspath,
259 uevent->deviceName,
260 uevent->major, uevent->minor,
261 uevent->ug.uid, uevent->ug.gid);
264 void ParseUeventMessage(const char *buffer, ssize_t length, struct Uevent *uevent)
266 if (buffer == NULL || uevent == NULL || length == 0) {
272 uevent->partitionName = NULL;
273 uevent->partitionNum = -1;
274 uevent->major = -1;
275 uevent->minor = -1;
276 uevent->busNum = -1;
277 uevent->devNum = -1;
285 AddUevent(uevent, event, len);
295 struct Uevent uevent = {};
297 ParseUeventMessage(ueventBuffer, n, &uevent);
298 if (uevent.syspath == NULL) {
299 INIT_LOGV("Ignore unexpected uevent");
303 HandleUeventRequired(&uevent, devices, num);
305 HandleUevent(&uevent);
331 // uevent triggered, now handle it.
358 if (strcmp(dirent->d_name, "uevent") != 0) {
362 if (snprintf_s(ueventBuffer, PATH_MAX, PATH_MAX - 1, "%s/%s", path, "uevent") == -1) {
363 INIT_LOGW("Cannot build uevent path under %s", path);