Lines Matching refs:self
43 def __init__(self, intlist_data, config, log): argument
52 self.__config = config
53 self.__log = log
54 intlist = self.__read_intlist(intlist_data)
55 self.__vt, self.__swt, self.__nv, header = self.__parse_intlist(intlist)
56 self.__swi_table_entry_size = header["swi_table_entry_size"]
57 self.__shared_isr_table_entry_size = header["shared_isr_table_entry_size"]
58 self.__shared_isr_client_num_offset = header["shared_isr_client_num_offset"]
60 def __read_intlist(self, intlist_data): argument
87 prefix = self.__config.endian_prefix()
93 self.__log.debug(str(header_raw))
113 self.__log.error("Cannot find sname null termination at IRQ{}".format(entry_raw[0]))
121 self.__log.debug("Unpacked IRQ{}, flags: {}, sname: \"{}\"\n".format(
126 self.__log.error("Non-zero data found at the end of the intList data.\n")
128 self.__log.debug("Configured interrupt routing with linker")
129 self.__log.debug("irq flags sname")
130 self.__log.debug("--------------------------")
133 self.__log.debug("{0:<3} {1:<5} {2}".format(
138 def __parse_intlist(self, intlist): argument
167 self.__log.debug('offset is ' + str(offset))
168 self.__log.debug('num_vectors is ' + str(nvec))
171 if not(self.__config.args.sw_isr_table or self.__config.args.vector_table):
172 self.__log.error("one or both of -s or -V needs to be specified on command line")
173 if self.__config.args.vector_table:
177 if self.__config.args.sw_isr_table:
184 if self.__config.test_isr_direct(flags):
186 self.__log.error("IRQ %d (offset=%d) exceeds the maximum of %d" %
192 self.__log.error("Regular Interrupt %d declared with section name %s "
196 table_index = self.__config.get_swt_table_index(offset, irq)
199 self.__log.error("IRQ %d (offset=%d) exceeds the maximum of %d" %
206 self.__log.error(("Attempting to register the same section name \"{}\"for" +
208 if self.__config.check_shared_interrupts():
210 if len(lst) >= self.__config.get_sym("CONFIG_SHARED_IRQ_MAX_NUM_CLIENTS"):
211 self.__log.error(f"Reached shared interrupt client limit. Maybe increase"
215 … self.__log.error(f"multiple registrations at table_index {table_index} for irq {irq} (0x{irq:x})"
239 def __isr_spurious_entry(self, irq): argument
242 func = self.__config.swt_spurious_handler,
243 sect = self.__isr_generated_section(irq)
246 def __isr_shared_entry(self, irq): argument
249 arg = '&{}[{}]'.format(self.__config.shared_array_name, irq),
250 func = self.__config.swt_shared_handler,
251 sect = self.__isr_generated_section(irq)
254 def __irq_spurious_entry(self, irq): argument
257 func = self.__config.vt_default_handler,
258 sect = self.__irq_spurious_section(irq)
261 def __write_isr_handlers(self, fp): argument
262 for i in range(self.__nv):
263 if len(self.__swt[i]) <= 0:
264 fp.write(self.__isr_spurious_entry(i) + '\n')
265 elif len(self.__swt[i]) > 1:
267 fp.write(self.__isr_shared_entry(i) + '\n')
270 i, self.__swt[i][0]))
272 def __write_irq_handlers(self, fp): argument
273 for i in range(self.__nv):
274 if self.__vt[i] is None:
275 fp.write(self.__irq_spurious_entry(i) + '\n')
279 def __write_shared_handlers(self, fp): argument
281 "{}[{}];\n".format(self.__config.shared_array_name, self.__nv))
283 shared_cnt = self.__config.get_sym('CONFIG_SHARED_IRQ_MAX_NUM_CLIENTS')
284 for i in range(self.__nv):
285 swt_len = len(self.__swt[i])
290 '\tZ_GENERIC_SECTION({})\n'.format(self.__shared_entry_section(i, j)) +
299 i, j, self.__swt[i][j]))
304 self.__shared_client_num_section(i),
309 def write_source(self, fp): argument
310 fp.write(self.source_header)
312 if self.__vt:
313 self.__write_irq_handlers(fp)
315 if not self.__swt:
318 if self.__config.check_shared_interrupts():
319 self.__write_shared_handlers(fp)
321 self.__write_isr_handlers(fp)
323 def __write_linker_irq(self, fp): argument
324 fp.write('{} = .;\n'.format(self.__config.irq_vector_array_name))
325 for i in range(self.__nv):
326 if self.__vt[i] is None:
327 sname = self.__irq_spurious_section(i)
329 sname = self.__vt[i]
332 def __write_linker_shared(self, fp): argument
333 fp.write(". = ALIGN({});\n".format(self.__shared_isr_table_entry_size))
334 fp.write('{} = .;\n'.format(self.__config.shared_array_name))
335 shared_cnt = self.__config.get_sym('CONFIG_SHARED_IRQ_MAX_NUM_CLIENTS')
336 client_num_pads = self.__shared_isr_client_num_offset - \
337 shared_cnt * self.__swi_table_entry_size
339 self.__log.error("Invalid __shared_isr_client_num_offset header value")
340 for i in range(self.__nv):
341 swt_len = len(self.__swt[i])
345 fp.write('KEEP(*("{}"))\n'.format(self.__shared_entry_section(i, j)))
347 sname = self.__swt[i][j]
348 if (j != 0) and (sname in self.__swt[i][0:j]):
353 fp.write('KEEP(*("{}"))\n'.format(self.__shared_client_num_section(i)))
354 fp.write(". = ALIGN({});\n".format(self.__shared_isr_table_entry_size))
356 def __write_linker_isr(self, fp): argument
357 fp.write(". = ALIGN({});\n".format(self.__swi_table_entry_size))
358 fp.write('{} = .;\n'.format(self.__config.sw_isr_array_name))
359 for i in range(self.__nv):
360 if (len(self.__swt[i])) == 1:
361 sname = self.__swt[i][0]
363 sname = self.__isr_generated_section(i)
366 def write_linker_vt(self, fp): argument
367 if self.__vt:
368 self.__write_linker_irq(fp)
370 def write_linker_swi(self, fp): argument
371 if self.__swt:
372 self.__write_linker_isr(fp)
374 if self.__config.check_shared_interrupts():
375 self.__write_linker_shared(fp)