title: Linux kernel headers' organization
body: <p>While I was doing some reading on system calls, I did a search for <code>syscalls.h</code> to find the header file in LXR. The search results puzzled me. There is a dozen of <code>syscalls.h</code> files coming from directories under <code>arch/_arch_name_/include/asm</code>. These are ok, they are architecture specific definitions or something else needed. The question is why do we have two different <code>syscalls.h</code> headers under both <code>include/linux</code> and <code>include/asm-generic</code>?</p>
  
  <p>Also, I want to find out that what <code>include/linux</code> headers are for and what <code>include/asm-generic</code> headers are for. How do they differentiate between each other? What is the logic behind having two separate header folders? How do they relate to each other?</p>
  
  <p>Thanks</p>