Hello Joursoir,
Nice to have you very interested in flashrom! One thing I wanted to say: it would be great to include the mailing list if you have discussions about the project. That would mean the community can join and potentially help too, and this is really useful.
Thomas, thank you so much for replying, this is awesome! :)
On Sat, Mar 19, 2022 at 2:43 AM Thomas Heijligen src@posteo.de wrote:
Hi Joursoir,
The idea for the "Restructure Shutdown Functions" project is to extend the struct programmer_entry with a function to handle programmer related shutdowns. Currently, the init function of each programmer calls, mostly indirect, register_shutdown on each item separately to handle its shutdown later. In this project, the state tracking and shutdown of the programmer own data should be moved to each programmer.
E.g.: const struct programmer_entry example_programmer = { ... .init = example_init, .shutdown = example_shutdown, };
struct example_data { int reg_a; };
static int example_init(struct example_data* data) { ... // keep track of the original value data->reg_a = pci_read_word(dev, PCI_MAGIC_ADDR, PCI_MAGIC_VALUE); // write new value pci_write_word(dev, PCI_MAGIC_ADDR, 0x42); }
static int example_shutdown(struct example_data* data) { // restore the original value pci_write_word(dev, PCI_MAGIC_ADDR, data->reg_a); }
Feel free to contact me if you have further questions.
-- Thomas
On Fri, 2022-03-18 at 17:46 +0300, Joursoir wrote:
Good day,
I am a student and very interested in flashrom. I fit the description of experienced C programmer. Open-source and low-level programming are my interests. I already have real experience with flashrom (CH341A programmer + chip "MX25L6436E") and want to become a GSoC 2022 contributor in this project.
I find the "Restructure Shutdown Function" project interestring to me. But right now it has no mentors. Maybe someone from the mailing can help me.
I have gone through sources and understand how things are now. The project description says "have a defined shutdown function in the programmer API". But we already have it. It's programmer_shutdown(). Or no?
The first and easiest thing that comes to my mind is to refuse using callbacks and use enums, thusly:
enum shutdown_func { SERPROG = 1 << 0, SPI = 1 << 1, ... };
int programmer_shutdown(enum shutdown_func execfunc) { ...
if(execfunc & SERPROG) ret |= serprog_shutdown(...); if(execfunc & SPI) { /* the problem is that SPI programmers have own shutdown
funcs, like dlc5_shutdown, byteblaster_shutdown, stlinkv3_spi_shutdown, so use struct spi_master, that contains shutdown callback */ ret |= spi_master_shutdown(...); }
...
}
This system has disadvantages, but it'll make easier to track the code flow. What are the potential problems in this implementation?
What's with struct flashrom_programmer? Is not implemented yet?
I would appreciate any feedback.
-- Joursoir _______________________________________________ flashrom mailing list -- flashrom@flashrom.org To unsubscribe send an email to flashrom-leave@flashrom.org
flashrom mailing list -- flashrom@flashrom.org To unsubscribe send an email to flashrom-leave@flashrom.org